我有以下问题。用户可以上传图片,我想把图片缩小5倍左右,不会造成图片失真。那是我想避免的。如何找到原始图像的宽度和高度并将其除以 5?
我使用php,忘记提及那个细节。
问候,佐兰
我有以下问题。用户可以上传图片,我想把图片缩小5倍左右,不会造成图片失真。那是我想避免的。如何找到原始图像的宽度和高度并将其除以 5?
我使用php,忘记提及那个细节。
问候,佐兰
从您的评论声音中,您正在寻找比您得到的答案更简单的东西。你试过getimagesize
吗?http://php.net/manual/en/function.getimagesize.php
你可以这样做:
$size = getimagesize($filename);
echo $size[0]/5; //width
echo $size[1]/5; //height
这种方法还具有不必依赖像 GD 之类的图像库或任何东西的优点。
http://php.net/manual/en/imagick.resizeimage.php
调用它FILTER_GAUSSIAN
<?php
$image = new Imagick( $filename );
$imageprops = $image->getImageGeometry();
if ($imageprops['width'] <= 200 && $imageprops['height'] <= 200) {
// don't upscale
} else {
$image->resizeImage(200,200, imagick::FILTER_GAUSSIAN, 0.9, true);
}
?>
这个想法是通过使用高斯滤波器来模糊图像,而不是对其进行二次采样。
图片上传完成后,使用以下函数:
<?php
function generate_image_thumbnail($source_image_path, $thumbnail_image_path){
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
switch ($source_image_type) {
case IMAGETYPE_GIF:
$source_gd_image = imagecreatefromgif($source_image_path);
break;
case IMAGETYPE_JPEG:
$source_gd_image = imagecreatefromjpeg($source_image_path);
break;
case IMAGETYPE_PNG:
$source_gd_image = imagecreatefrompng($source_image_path);
break;
}
if ($source_gd_image === false) {
return false;
}
$thumbnail_image_width = $source_image_width/5;
$thumbnail_image_height = $source_image_height/5;
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
imagedestroy($source_gd_image);
imagedestroy($thumbnail_gd_image);
return true;
}
?>
将正确的参数传递给函数,它将完成这项工作。
并确保在您的 php 设置中启用了 GD。它使用 gd 库。