Конвертируйте PNG в JPG и установите прозрачный фон на белый с помощью ImageMagick и PHP - PullRequest
22 голосов
/ 12 марта 2011

Как я могу использовать ImageMagick (с расширением php), чтобы установить прозрачный фон на белый при преобразовании изображения из PNG в JPEG?

Ответы [ 2 ]

28 голосов
/ 12 марта 2011

На момент написания вы не указали, какое расширение вы используете, но если бы вы использовали командную строку, команда была бы:

convert image.png -background white -flatten -alpha off image.jpg

Более подробную информацию можно найти на Документация по использованию маскирования .

Используя, например, IMagick, я думаю, вы могли бы сделать это следующим образом:

(полностью не проверено, никогда не использовал IMagick и не устанавливал егопроверить)

$image = new IMagick('image.png');

$flattened = new IMagick();
$flattened->newImage($image->getImageWidth(), $image->getImageHeight(), new ImagickPixel("white"));

$flattened->compositeImage($image, imagick::COMPOSITE_OVER, 0, 0);

$flattened->setImageFormat("jpg");
$flattened->writeImage('image.jpg');

$image->clear();
$image->destroy();
$flattened->clear();
$flattened->destroy();
5 голосов
/ 31 октября 2012

Если вы используете расширение Imagick:

<?php
// load the source transparent png
$i = new IMagick('image.png');

// set the background to white
// you can also use 'rgb(255,255,255)' in place of 'white'
$i->setImageBackgroundColor(new ImagickPixel('white'));

// flattens multiple layers
$i = $i->flattenImages();

// the output format
$i->setImageFormat('jpg');

// save to disk
$i->writeImage('image.jpg');

// and/or output directly
// header('Content-Type: '.$i->getFormat());
// echo $i->getImageBlob();

// cleanup
$i->clear();
$i->destroy();
...