Всякий раз, когда пользователь загружает фотографию с помощью моего сценария, WideImage конвертирует ее в JPEG. Тем не менее, я просто заметил, что если я загружу PNG-картинку с прозрачным фоном, вместо нее она станет черной.
Есть ли способ сделать этот белый вместо этого?
Вот как я сохраняю изображение:
$img->resizeDown('500', null)->saveToFile('annonce_billeder/'.$bnavn.'.jpeg', 70);
Не совсем прямо. Вы не читаете о том, как прозрачность хранится в изображениях: это обычное значение цвета (любой цвет), которое было отмечено особенно прозрачно.
Поэтому, скорее всего, цвет, указанный в примерах, которые вы пытаетесь на самом деле , закодирован как черный, а прозрачность теряется при преобразовании.
Возможно, вы попытаетесь выяснить, можете ли вы определить, есть ли цвет, обозначенный как прозрачный на входящем снимке, а затем вручную измените этот цвет на непрозрачность и белый перед преобразованием изображения.
Может быть похоже, но я смог создать пустой образ truecolor и заполнить его своим прозрачным цветом, прежде чем делать какой-либо рисунок:
$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"); $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);
-// 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);