每當用戶使用我的腳本上傳照片時,WideImage會將其轉換爲JPEG。不過,我只注意到,如果我上傳一張帶有透明背景的PNG圖片,它會變成黑色。WideImage - 已轉換的PNG的透明區域應爲白色
有什麼辦法讓這個白色代替?
這是我如何保存圖像:
$img->resizeDown('500', null)->saveToFile('annonce_billeder/'.$bnavn.'.jpeg', 70);
每當用戶使用我的腳本上傳照片時,WideImage會將其轉換爲JPEG。不過,我只注意到,如果我上傳一張帶有透明背景的PNG圖片,它會變成黑色。WideImage - 已轉換的PNG的透明區域應爲白色
有什麼辦法讓這個白色代替?
這是我如何保存圖像:
$img->resizeDown('500', null)->saveToFile('annonce_billeder/'.$bnavn.'.jpeg', 70);
沒有。你必須瞭解如何在圖片中存儲透明度:這是一種普通的顏色值(任何顏色),它被標記爲特別透明。
所以最有可能的顏色,你在實際嘗試的示例圖片中指定的顏色是編碼爲黑色,透明度在轉換時丟失。
您可能試圖瞭解是否可以檢測傳入圖片中是否標記爲透明的顏色,然後在轉換圖片之前手動將該顏色更改爲非透明和白色。
可能是相似的,但我可以創建一個空的真彩色圖像,做任何繪圖之前有自己的透明顏色填充:
$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);
這是如何做到這一點:
// 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");
隨着一些改變(修正)裏卡多飛腳的解決方案的代碼,它...
// 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);
透明PNG圖像用黑色透明位出現的工作,但這個工作一個魅力增加一個白色背景透明圖像。 – Luke 2014-04-23 09:29:49