php Imagemagick jpg黑色背景

时间:2011-05-23 15:49:42

标签: php imagemagick imagick

我有一个php脚本来创建pdf的jpg缩略图,如下所示;

<?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 个答案:

答案 0 :(得分:9)

之前发布的答案都没有对我有用,但以下情况如下:

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

更新:所以我最近改变了操作系统,虽然之前在我的Mac上的Ubuntu机器上工作,但某些图像仍然是黑色的。

我必须将脚本更改为以下内容:

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

在阅读图像之前设置背景颜色似乎很重要。我还压平任何可能的图层并删除alpha通道。我觉得我在我的Ubuntu机器上试过了ALPHACHANNEL_REMOVE而它没有用,所以希望在这些答案之间,读者可以找到适合他们的东西。

答案 1 :(得分:1)

如果你的Imagick版本不是最新的,那么setImageBackgroundColor可能是错误的。

交换以下行

$im->setImageBackgroundColor("red");

到此(Imagick版本&gt; = 2.1.0)

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

或(Imagick版本&lt; 2.1.0)

$im->setBackgroundColor("red");

答案 2 :(得分:1)

我解决了它;

$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat("jpeg");
$im->writeImage("imagename.jpg");

答案 3 :(得分:1)

只需添加此项即可防止使用黑色背景创建JPG

-alpha off

答案 4 :(得分:1)

将此代码$im->setimageformat("jpg");更改为此代码 $im->setimageformat("png");如果您遇到背景颜色问题。