php Imagemagick jpg черный фон - PullRequest
6 голосов
/ 23 мая 2011

У меня есть скрипт php для создания эскиза jpg в формате pdf следующим образом:

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("jpg");
$im->resizeImage(200,200,1,0);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";
?>

Но полученный jpg имеет черный фон вместо белого .. Как я могу это исправить ??

Ответы [ 5 ]

9 голосов
/ 25 августа 2017

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

$image = new Imagick;

$image->setResolution(300, 300);

$image->readImage("{$originalPath}[0]");

$image->setImageFormat('jpg');

$image->scaleImage(500, 500, true);

$image->setImageAlphaChannel(Imagick::VIRTUALPIXELMETHOD_WHITE);

Поскольку я использую инфраструктуру Laravel, я беру преобразованное изображение и сохраняю его, используя файловую систему Laravels.

Storage::put($storePath, $image->getImageBlob());

Обновление: поэтому я недавно сменил ОС, и хотя раньше это работало на моей машине с Ubuntu на моем Mac, некоторые изображения все еще выходили черными.

Мне пришлось изменить скрипт на следующий:

$image = new Imagick;

$image->setResolution(300, 300);

$image->setBackgroundColor('white');

$image->readImage("{$originalPath}[0]");

$image->setImageFormat('jpg');

$image->scaleImage(500, 500, true);

$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);

Кажется важным установить цвет фона перед чтением на изображении. Я также сглаживаю все возможные слои и удаляю альфа-канал. Мне кажется, что я попробовал ALPHACHANNEL_REMOVE на своей машине с Ubuntu, и, надеюсь, между этими ответами читатели смогут найти что-то подходящее для них.

1 голос
/ 19 мая 2015

замените этот код $im->setimageformat("jpg"); на этот код $im->setimageformat("png");, если вы столкнулись с проблемой цвета фона.

1 голос
/ 09 апреля 2012

Я решил это путем;

$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat("jpeg");
$im->writeImage("imagename.jpg");
1 голос
/ 07 сентября 2012

Простое добавление предотвращает создание JPG с черным фоном

-alpha off
1 голос
/ 23 мая 2011

Если ваша версия Imagick не обновлена, setImageBackgroundColor может быть неправильным.

Поменяйте местами следующую строку

$im->setImageBackgroundColor("red");

к этому (версия Imagick> = 2.1.0)

$im->setBackgroundColor(new ImagickPixel("red"));

или (Imagick версия <2.1.0) </p>

$im->setBackgroundColor("red");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...