Установить imagemagick png цвет фона изображения - PullRequest
4 голосов
/ 23 мая 2011

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

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("png");
$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)."' />";    
?>

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

Заранее спасибо ... :)

blasteralfred

Ответы [ 2 ]

4 голосов
/ 08 ноября 2012

Решение не в цвете фона, а в альфа-канале! Попробуйте с этим кодом:

$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);
2 голосов
/ 25 мая 2011

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

После небольшой отладки я понял, что проблема действительно связана с

imagick::resizeImage()

функция. По любой причине, когда вы устанавливаете все свои цвета, компрессию и т. Д., ResizeImage добавляет черный фон. Мое решение состоит в том, чтобы использовать GD для изменения размера, чтобы у меня было полное динамическое изменение размера - поскольку вас это не интересует, я просто использовал бы функцию выборки изображений. Ваш код должен быть таким:

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(80);
$im->setImageFormat("jpeg");
$im->sampleImage(200,200);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();    
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";    
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...