Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php Imagemagick jpg黑色背景_Php_Imagemagick_Imagick - Fatal编程技术网

php Imagemagick 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脚本来创建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背景是黑色而不是白色。。如何解决此问题???

如果您的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);