2011-05-23 173 views
5

我有一個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

回答

1

我解決了;

$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

1

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

1

簡單地增加這可防止JPG與黑色背景

-alpha off 
+0

在哪裏?請以問題的形式給出答案。所以在這種情況下有效的PHP。 – 2017-08-25 10:00:40

1

改變這個代碼$im->setimageformat("jpg");這個代碼 $im->setimageformat("png");,如果你面對一個背景顏色問題創造。

1

先前發佈的答案都不爲我工作,不過下面做:

$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,並且它沒有工作,所以希望在這些答案之間讀者可以找到適合他們的東西。