Intereting Posts
Как отправить значения из html-формы в почту в таблице PHP Как лучше всего получить чей-то «ранг» из таблицы баллов с php и mysql без цикла Почему mcrypt_encrypt () помещает двоичные символы в конец моей строки? Сделать стартовой Рекурсивная функция для копирования многоуровневой папки не работает laravel query php как получить максимальное значение в пределах диапазона Работа с японскими именами файлов в PHP 5.3 и Windows Vista? Как запустить cronjob каждые X минут? Как перенаправить URL-адрес после определения некоторых переменных с помощью curl_init pecl install cassandra throws: "error: Не удалось загрузить libcassandra" в OS X эффективное решение: кодировка base32 в php Как разрешить исключение ServiceCircularReferenceException? как создать строку, разделенную запятой, из массива запросов, выполняемых в php codeigniter Удаление расширения PHP-файла при работе с файлами PHP Формат сообщения о действиях или загрузка файлов XML?

WideImage – Прозрачные области конвертированного PNG должны быть белыми

Всякий раз, когда пользователь загружает фотографию с помощью моего сценария, 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);