使用php Imagick保留背景来调整PNG大小

时间:2013-06-25 11:51:11

标签: php image imagick

我正在尝试使用cropThumbnailImage调整图片大小。我使用cropThumbnailImage,因为它调整到原始图像的较短长度,并在两侧均匀地裁剪图像的长边,使图像的中心部分保持未被剪切。这适用于jpg图像,但对于png图像,调整大小的pngs会产生黑色背景。

以下是我使用的代码。

    $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图像会变为黑色背景。

尝试在here下方添加以下行,但无效。

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

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

2 个答案:

答案 0 :(得分:1)

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

$im = new Imagick($imgPath);
$im->setImageFormat('png');
$im->writeImage('/files/thumbnails/new_title.png');

答案 1 :(得分:0)

  1. JPG中没有透明度...... JPG不是透明图像......此处需要PNG和GIF。

  2. 如果您要参考PNG,有一个PHP代码可以帮助您透明地调整PNG的大小:

  3.   

    $ x =“COORDINATES - X for crop”;

         

    $ y =“COORDINATES - y for crop”;

         

    $ w =“width”;

         

    $ h =“height”;

         

    $ 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);

         

    imagedestroy($张图片);

         

    imagedestroy($ img_cropped);

    编辑:试试这个:

      

    $ image = imagecreatefrompng($ filename);

         

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

         

    imagealphablending($ new_image,false);

         

    imagesavealpha($ new_image,true);

         

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

         

    $ image = $ new_image;

         

    //保存

         

    imagealphablending($ image,false);

         

    imagesavealpha($ image,true);

         

    imagepng($ image,$ filename);

    别忘了定义$ filename,$ width,$ height !!!!