php Imagemagick jpg黑色背景
我有一个php脚本来创建pdf的jpg缩略图,如下所示php Imagemagick jpg黑色背景,php,imagemagick,imagick,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
<?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背景是黑色而不是白色。。如何解决此问题???如果您的Imagick版本不是最新的,则setImageBackgroundColor可能错误 交换下一行
$im->setImageBackgroundColor("red");
为此(Imagick版本>=2.1.0)
或(Imagick版本<2.1.0)
我用计算机解决了它
$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat("jpeg");
$im->writeImage("imagename.jpg");
简单地添加这一点就可以防止创建带有黑色背景的JPG
-alpha off
更改此代码
$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());
更新:所以我最近改变了操作系统,而这以前在我的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\u REMOVE
,但效果不太好。希望在这些答案之间,读者能找到适合他们的答案。一份相关jpg文件的副本或链接会很有帮助,还有一张结果输出的屏幕截图。劳伦斯·伯克:这是结果图像,你的css是什么你能链接原始的jpg吗?@Laurence Burke,上面的是原始的jpg文件。我一点样式都没有我的问题做了一些修改。。看一看。。您的建议不起作用。@blasteralfred您能否提供PDF副本的访问权限,因为我相信问题可能与此相关,而不是您现在提供的上述代码。更新后的代码与我的PDF没有任何问题。在哪里?请以问题的形式回答。因此在本例中,有效的php.$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE)<代码>设置压缩质量
在这种情况下实际不起作用。要更改质量,请使用setImageCompressionQuality
Storage::put($storePath, $image->getImageBlob());
$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);