3

我正在尝试使用cropThumbnailImage. 我使用cropThumbnailImage它来调整原始图像的较短长度,并在两侧均等地裁剪较长边的图像,以使图像的中心部分保持未裁剪。这适用于 jpg 图像,但对于 png 图像,调整大小的 png 会得到黑色背景。

以下是我使用的代码。

    $image = new \Imagick($src);

    // resize & crop
    $image->cropThumbnailImage($width, $height);

    // save new resized file
    $image->writeImage($dest);

为以下 png 图像运行此代码。

http://tuxpaint.org/stamps/stamps/animals/birds/cartoon/tux.png http://www.cs.csubak.edu/~mcabrera/CS211/transparent.png http://www.tcarms.com /media/assets/productPhotos/006_G2%20Contender/png/Pistol_12in_Ribbed_Blued_2720.png

输出图像根据需要调整大小,但 png 图像变为黑色背景。

尝试从此处添加以下行但没有用。

imagealphablending( $image, false );
imagesavealpha( $image, true );

网络上还有其他解决方案可以实现 png 图像的大小调整,但我没有找到像这样调整图像大小的解决方案cropThumbnailImage

4

2 回答 2

2

使用以下代码段保留透明度:

$im = new Imagick($imgPath);
$im->setImageFormat('png');
$im->writeImage('/files/thumbnails/new_title.png');
于 2016-09-07T17:38:26.883 回答
0
  1. 您的 JPG 不透明... JPG 不是透明图像... 这里需要 PNG 和 GIF。

  2. 如果您指的是 PNG,有一个 PHP 代码可以帮助您调整具有透明度的 PNG:

$x = "坐标 - X 代表作物";

$y = "坐标 - y 表示作物";

$w = "宽度";

$h = "身高";

$img = imagecreatefrompng($img_path);

imagealphablending($img, true);

$img_cropped = imagecreatetruecolor($w, $h);

imagesavealpha($img_cropped, true);

imagealphablending($img_cropped, false);

$transparent = imagecolorallocatealpha($img_cropped, 0, 0, 0, 127);

imagefill($img_cropped, 0, 0, $transparent);

imagecopyresampled($img_cropped, $img, 0, 0, $x, $y, $w, $h, $w, $h); // 你也可以在这里使用 imagecopy()

imagepng($img_cropped, "your_image_cropped.png", 2);

图像销毁($img);

imagedestroy($img_cropped);

编辑:试试这个:

$image = imagecreatefrompng ( $filename );

$new_image = imagecreatetruecolor ( $width, $height ); // 新的高度和高度

imagealphablending($new_image, false);

图像保存阿尔法($new_image,真);

imagecopyresampled ( $new_image, $image, 0, 0, 0, 0, $width, $height, imagesx ( $image ), imagesy ( $image ) );

$image = $new_image;

// 保存

imagealphablending($image, false);

图像保存阿尔法($图像,真);

imagepng ( $image, $filename );

不要忘记定义 $filename、$width、$height!!!!

于 2013-06-25T12:02:55.097 回答