php imagecopyresampled 未按预期工作
php imagecopyresampled not working as expected
我正在尝试使用 imagecopyresampled
裁剪图像,然后再将它们保存到 ftp-服务器。
我的 php 是:
function image_resizing($image, $type, $ext, $quality, $file_name) {
strtolower($ext);
list($src_width, $src_height) = getimagesize($image);
switch($ext) {
case 'gif':
$image_create = 'imagecreatefromgif';
break;
case 'png':
$image_create = 'imagecreatefrompng';
break;
default:
$image_create = 'imagecreatefromjpeg';
break;
}
$temp_img = $image_create($image);
if($type == 'wide') {
$width = 1920;
$height = 2160;
} else if($type == 'content') {
$height = 600;
$width = 400;
}
$src_x = ($src_width - $width) / 2;
$src_y = ($src_height - $height) / 2;
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $src_width, $src_height);
$image_dest = '';
imagejpeg($new_image, $file_name, $quality);
}
但不知何故,我总是在裁剪区域周围出现黑色 space 或在新图像中全黑(在较小的图像中)。据我所知 src/dest 坐标是正确的。
图片:
http://www.strongleaf.nl/images/website_images/wide-images/image-test-image-imagecopyresampled.jpg
如果原图比较大,我觉得pb就是imagecopyresampled的最后两个参数在原图外划出一个矩形。你能试试吗:
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $width, $height);
我发现几个问题:
1) 您应该将 imagecopyresampled 更改为(注意最后两个参数)
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $width, $height);
2) 你应该
$ext = strtolower($ext);
3) $width, $height 将为零,以防你将错误的 $type 传递给函数
但是您仍然无法避免在比例与 1920x2160 或 400x600 不同的图像周围出现黑色 space,如果它们在任何维度上都较小。
你可以在Imagick中调用::cropthumbnailimage,这将解决所有尺寸问题。我开始使用 Imagick 的主要原因是 GD 库的内存使用率确实很高。
我正在尝试使用 imagecopyresampled
裁剪图像,然后再将它们保存到 ftp-服务器。
我的 php 是:
function image_resizing($image, $type, $ext, $quality, $file_name) {
strtolower($ext);
list($src_width, $src_height) = getimagesize($image);
switch($ext) {
case 'gif':
$image_create = 'imagecreatefromgif';
break;
case 'png':
$image_create = 'imagecreatefrompng';
break;
default:
$image_create = 'imagecreatefromjpeg';
break;
}
$temp_img = $image_create($image);
if($type == 'wide') {
$width = 1920;
$height = 2160;
} else if($type == 'content') {
$height = 600;
$width = 400;
}
$src_x = ($src_width - $width) / 2;
$src_y = ($src_height - $height) / 2;
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $src_width, $src_height);
$image_dest = '';
imagejpeg($new_image, $file_name, $quality);
}
但不知何故,我总是在裁剪区域周围出现黑色 space 或在新图像中全黑(在较小的图像中)。据我所知 src/dest 坐标是正确的。
图片:
http://www.strongleaf.nl/images/website_images/wide-images/image-test-image-imagecopyresampled.jpg
如果原图比较大,我觉得pb就是imagecopyresampled的最后两个参数在原图外划出一个矩形。你能试试吗:
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $width, $height);
我发现几个问题:
1) 您应该将 imagecopyresampled 更改为(注意最后两个参数)
imagecopyresampled ($new_image, $temp_img, 0, 0, $src_x, $src_y, $width, $height, $width, $height);
2) 你应该
$ext = strtolower($ext);
3) $width, $height 将为零,以防你将错误的 $type 传递给函数
但是您仍然无法避免在比例与 1920x2160 或 400x600 不同的图像周围出现黑色 space,如果它们在任何维度上都较小。
你可以在Imagick中调用::cropthumbnailimage,这将解决所有尺寸问题。我开始使用 Imagick 的主要原因是 GD 库的内存使用率确实很高。