gpt4 book ai didi

php - 使用 imagecopyresampled 裁剪图像的中心正方形

转载 作者:可可西里 更新时间:2023-10-31 22:42:52 24 4
gpt4 key购买 nike

我正在尝试从正常尺寸的图像创建 2 个裁剪缩略图(60x60 和 150x150)。除了裁剪之外,一切都很好,裁剪不起作用。该部分正在生成一个缩略图,右侧有一条黑线,如下所示:

.............
. ...
. ...
. ...
.............

调整大小效果很好,因为最后的缩略图具有正确的 60 和 150 高度(从原始横向图像开始工作)但它们仍然是横向的。

我有什么:

list($thumb_width, $thumb_height) = getimagesize($thumb_target);
if ($thumb_width > $thumb_height) { // landscape
$thumb1_new_height = 60;
$thumb1_new_width = floor( $thumb_width * ( $thumb1_new_height / $thumb_height ));
$thumb1_crop_x = ceil(($thumb_width - $thumb_height) / 2);
$thumb1_crop_y = 0;
$thumb2_new_height = 150;
$thumb2_new_width = floor( $thumb_width * ( $thumb2_new_height / $thumb_height ));
$thumb2_crop_x = ceil(($thumb_width - $thumb_height) / 2);
$thumb2_crop_y = 0;
}
else if ($thumb_width < $thumb_height){ // portrait
$thumb1_new_width = 60;
$thumb1_new_height = floor( $thumb_height * ( $thumb1_new_width / $thumb_width ));
$thumb1_crop_x = 0;
$thumb1_crop_y = ceil(($thumb_height - $thumb_width) / 2);
$thumb2_new_width = 150;
$thumb2_new_height = floor( $thumb_height * ( $thumb2_new_width / $thumb_width ));
$thumb2_crop_x = 0;
$thumb2_crop_y = ceil(($thumb_height - $thumb_width) / 2);
} else { // square
$thumb1_new_width = 60;
$thumb1_new_height = 60;
$thumb1_crop_x = 0;
$thumb1_crop_y = 0;
$thumb2_new_width = 150;
$thumb2_new_height = 150;
$thumb2_crop_x = 0;
$thumb2_crop_y = 0;
}
$thumb1_tmp_img = imagecreatetruecolor($thumb1_new_width,$thumb1_new_height);
$thumb2_tmp_img = imagecreatetruecolor($thumb2_new_width,$thumb2_new_height);
imagecopyresampled($thumb1_tmp_img, $thumb_img, 0, 0, $thumb1_crop_x, $thumb1_crop_y, $thumb1_new_width, $thumb1_new_height, $thumb_width, $thumb_height);
imagecopyresampled($thumb2_tmp_img, $thumb_img, 0, 0, $thumb2_crop_x, $thumb2_crop_y, $thumb2_new_width, $thumb2_new_height, $thumb_width, $thumb_height);

最佳答案

我认为你的 thumb1_tmp_img 接近尾声时出错了。我把它作为一个类,所以我不必像你那样重复很多,但你可以看到变化。看看这是否适合您:

class ImageFactory
{
public function MakeThumb($thumb_target = '', $width = 60,$height = 60,$SetFileName = false, $quality = 80)
{
$thumb_img = imagecreatefromjpeg($thumb_target);

// size from
list($w, $h) = getimagesize($thumb_target);

if($w > $h) {
$new_height = $height;
$new_width = floor($w * ($new_height / $h));
$crop_x = ceil(($w - $h) / 2);
$crop_y = 0;
}
else {
$new_width = $width;
$new_height = floor( $h * ( $new_width / $w ));
$crop_x = 0;
$crop_y = ceil(($h - $w) / 2);
}

// I think this is where you are mainly going wrong
$tmp_img = imagecreatetruecolor($width,$height);

imagecopyresampled($tmp_img, $thumb_img, 0, 0, $crop_x, $crop_y, $new_width, $new_height, $w, $h);

if($SetFileName == false) {
header('Content-Type: image/jpeg');
imagejpeg($tmp_img);
}
else
imagejpeg($tmp_img,$SetFileName,$quality);

imagedestroy($tmp_img);
}
}

// Initiate class
$ImageMaker = new ImageFactory();

// Here is just a test landscape sized image
$thumb_target = 'http://media1.santabanta.com/full6/Outdoors/Landscapes/landscapes-246a.jpg';

// 60px x 60px
$ImageMaker->MakeThumb($thumb_target,60,60,'image60px.jpg');

// Here is a portrait for testing
$thumb_target = 'http://imgc.allpostersimages.com/images/P-488-488-90/55/5543/L6HLG00Z/posters/warning-you-are-entering-a-fart-zone.jpg';

// 150px x 150px
$ImageMaker->MakeThumb($thumb_target,150,150,'image150px.jpg');

关于php - 使用 imagecopyresampled 裁剪图像的中心正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com