php Imagemagick jpg黑色背景

问题描述:

我有一个php脚本来创建pdf的缩略图,如下所示;php Imagemagick 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有黑色背景,而不是白色..我怎样才能解决这个问题?

+0

有问题的jpg文件的副本或链接将有所帮助,并且还会显示结果输出的屏幕截图。 – 2011-05-23 15:54:23

+0

劳伦斯伯克:这里是由此产生的图像http://i.imgur.com/jyQC6.jpg – 2011-05-23 16:09:43

+0

什么是你的CSS样式喜欢,你可以链接原始JPG? – 2011-05-23 16:22:18

我解决了;

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

'setCompressionQuality'不适用于这种情况。对于改变质量使用'setImageCompressionQuality' – vatavale 2018-02-24 19:06:19

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

交换以下行

$im->setImageBackgroundColor("red"); 

到此(Imagick版本> = 2.1.0)

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

或(Imagick版本< 2.1.0)

$im->setBackgroundColor("red"); 
+0

我在我的问题上做了一些改变..看看..和你的建议是行不通的.. – 2011-05-23 16:36:25

+0

@blasteralfred你能提供访问您的PDF副本,因为我相信这个问题可能与此相关,而不是上面现在提供的代码。更新后的代码在我遇到PDF时没有问题。 – carlgarner 2011-05-26 10:45:25

简单地增加这可防止JPG与黑色背景

-alpha off 
+0

在哪里?请以问题的形式给出答案。所以在这种情况下有效的PHP。 – 2017-08-25 10:00:40

改变这个代码$im->setimageformat("jpg");这个代码 $im->setimageformat("png");,如果你面对一个背景颜色问题创造。

先前发布的答案都不为我工作,不过下面做:

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

的图像读取之前设置背景颜色好像很重要的。我也将任何可能的图层弄平并移除Alpha通道。我觉得我在我的Ubuntu机器上试过ALPHACHANNEL_REMOVE,并且它没有工作,所以希望在这些答案之间读者可以找到适合他们的东西。