Nasıl isteğe bağlı boyutlarda görüntü dosyasını yeniden boyutlandırmak yok

2 Cevap php

Ben resim yükleme formu var, kullanıcı aimage dosyası iliştirir ve (Original 200kb, 500kb, 1mb, 5MB) yüklenen görüntü dosyasını yeniden boyutlandırmak için görüntü boyutu seçer. Sonra benim komut dosyası, kullanıcının isteğe büyüklüğüne göre dosya boyutunu yeniden boyutlandırmak, ama bu özelliği uygulamak için nasıl emin değil im gerekiyor

Kullanıcı boyutlandırmak 200KB seçer Örneğin, bir 1mb boyutu kullanıcı yüklenenler görüntü, ve, sonra benim komut dosyası 200kb boyutu ile kaydetmeniz gerekir.

Herkes biliyor veya benzer görev bir deneyimi var mı?

Senin için teşekkürler şimdiden cevap.

2 Cevap

GD library, imagecopyresampled() kullanın .

<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, null, 100);
?>

Eğer belirli bir boyut görüntü dosyasını yeniden boyutlandırmak istiyorsanız Edit:, bu biraz zor. Tüm önemli resim formatları sıkıştırma kullanabilir ve sıkıştırma oranları sıkıştırılmış ne niteliğine göre değişir. Masmavi gökyüzü sıkıştırmak ve insanların deniz olacak daha daha iyi bir sıkıştırma oranı elde edersiniz.

Yapabileceğiniz en iyi gerekirse ayarlayarak, belirli bir boyutu deneyin ve dosya boyutu ne olduğunu görmek belirli bir boyutunu deneyin.

Resize ratio = desired file size / actual file size
Resize multipler = square root (resize ratio)
New height = resize multiplier * actual height
New width = resize multiplier * actual width

Bu temelde beklenen sıkıştırma oranı bir yaklaşım faktörleri. (-% 5 gibi + /) ve gerektiğinde numaralarını çimdik Biraz tolerans olacağı beklenebilir.

Belirli bir dosya boyutuna yeniden boyutlandırmak için doğrudan bir yol yoktur. Son olarak ben belirli bir dosya boyutuna boyutlandırma oldukça sıradışı olduğunu eklemek gerekir. (Boy oranını muhafaza ederek), belirli bir yükseklik ve / veya genişliğine göre yeniden boyutlandırma çok daha yaygın ve beklenen (kullanıcı tarafından) 'dir.

Update: olarak doğru bir işaret, bu dosya boyutu yanlış olur. Oranı, (bir kez genişliğe, bir zamanlar yükseklik) iki kez uygulayarak konum olarak dosya boyutu oranlarının kare kök olması gerekiyor.

PHP sağlanan GD Kütüphane Kullanımı:

// $img is the image resource created by opening the original file
// $w and $h is the final width and height respectively.
$width = imagesx($img);$height = imagesy($img);
$ratio = $width/$height;

if($ratio > 1){
// width is greater than height
$nh = $h;
$nw = floor($width * ($nh/$height));
}else{
$nw = $w;
$nh = floor($height * ($nw/$width));
}

//centralize image
$nx = floor(($nw- $w) / 2.0);
$ny = floor(($nh-$h) / 2.0);

$tmp2 = imagecreatetruecolor($nw,$nh);
imagecopyresized($tmp2, $img,0,0,0,0,$nw,$nh,$width,$height);

$tmp = imagecreatetruecolor($w,$h);
imagecopyresized($tmp, $tmp2,0,0,$nx,$ny,$w,$h,$w,$h);

imagedestroy($tmp2);imagedestroy($img);

imagejpeg($tmp, $final_file);

Bu kod parçası, orijinal görüntü almak belirtilen boyutlara boyutlandırmak olacaktır. O İlk belirtilen boyutlara güzel düşmek yapma, + görüntüyü merkezde kapalı kırpmak, ardından görüntüyü yeniden boyutlandırmak oranı yönüyle çalışacağız.