ユーザーが私のスクリプトを使用して写真をアップロードするたびに、WideImage はその写真を JPEG に変換します。ただし、背景が透明な 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");
Ricardo Gamba のソリューション コードにいくつかの変更 (修正) を加えることで、それは機能します...
// 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);