2012-08-15 112 views
1

每當用戶使用我的腳本上傳照片時,WideImage會將其轉換爲JPEG。不過,我只注意到,如果我上傳一張帶有透明背景的PNG圖片,它會變成黑色。WideImage - 已轉換的PNG的透明區域應爲白色

有什麼辦法讓這個白色代替?

這是我如何保存圖像:

$img->resizeDown('500', null)->saveToFile('annonce_billeder/'.$bnavn.'.jpeg', 70); 

回答

1
真的直接

沒有。你必須瞭解如何在圖片中存儲透明度:這是一種普通的顏色值(任何顏色),它被標記爲特別透明。

所以最有可能的顏色,你在實際嘗試的示例圖片中指定的顏色是編碼爲黑色,透明度在轉換時丟失。

您可能試圖瞭解是否可以檢測傳入圖片中是否標記爲透明的顏色,然後在轉換圖片之前手動將該顏色更改爲非透明和白色。

1

可能是相似的,但我可以創建一個空的真彩色圖像,做任何繪圖之前有自己的透明顏色填充:

$img = WideImage_TrueColorImage::create(100, 100); 
$img->fill(0,0,$img->getTransparentColor()); 
// then text, watermark, etc 
$img->save('...'); 

我想你會做更多的東西一樣:

$img = WideImage::load(<source>); 
if(<$img is png>) { 
    $img->fill(0,0, $img->getTransparentColor()); 
} 
$img->resizeDown(500, null)->saveToFile('target.jpg', 70); 
1

這是如何做到這一點:

// Load the original image 
$original = WideImage::load("image.png"); 
$original->resizeDown(1000); // Do whatever resize or crop you need to do 

// Create an empty canvas with the original image sizes 
$img = WideImage::createTrueColorImage($resized->getWidth(),$resized->getHeight()); 
$bg = $img->allocateColor(255,255,255); 
$img->fill(0,0,$bg); 

// Finally merge and do whatever you need... 
$img->merge($original)->saveToFile("image.jpg"); 
+0

透明PNG圖像用黑色透明位出現的工作,但這個工作一個魅力增加一個白色背景透明圖像。 – Luke 2014-04-23 09:29:49

1

隨着一些改變(修正)裏卡多飛腳的解決方案的代碼,它...

// Load the original image 
$original = WideImage::load("image.png"); 
$resized = $original->resizeDown('500', null); // Do whatever resize or crop you need to do 
$original->destroy(); // free some memory (original image not needed any more) 

// Create an empty canvas with the resized image sizes 
$img = WideImage::createTrueColorImage($resized->getWidth(), $resized->getHeight()); 
$bg = $img->allocateColor(255,255,255); 
$img->fill(0,0,$bg); 

// Finally merge and do whatever you need... 
$img->merge($resized)->saveToFile("image.jpg", 70); 
相關問題