Сервис Pixlr задаём один цвет фону
Другой инструмент чтобы сделать прозрачный фон онлайн – это похожий на «Фотошоп» онлайн-редактор Pixlr. Он обладает значительным числом возможностей, но нас интересует в первую очередь создание прозрачного фона онлайн.
-
После загрузки изображения оно появится в окне редактирования, нас же интересует окошко «Слои» справа, с расположенной в нём опцией «Задний слой» с замочком.
- Дважды кликните на замочек, и вместо замочка появится галочка.
- Теперь кликаем на «Волшебную палочку» в панели инструментов слева (обычно это третья иконка сверху на левом столбце), нажимаем ею на фон картинки (он помечается соответствующей линией), а затем жмём на клавишу «Delete» для удаления фона. Возможно, так придётся сделать несколько раз, добиваясь полного удаления ненужного фона на фото.
- После того, как вы полностью избавитесь от фона, нажмите на кнопку «Файл», и там выберите «Сохранить».
- В качестве расширения сохранённого файла выбирайте png, иначе прозрачный фон онлайн pixlr может быть утрачен.
Ресайзим GIF
А вот GIF-е прозрачность реализованна по-другому. В нем один из используемых цветов (любой, на выбор автора картинки) объявляется как прозрачный, и при отрисовке данной картинки пиксели имеющие данный цвет заменяются прозрачными пикселями. Такая вот «псевдо-прозрачность»:
И единственная причина по которой может появится фон в прозрачной GIF — программист забывает указать «прозрачный» цвет.
В php за это отвечает функция imagecolortransparent — задает прозрачный цвет. Но сначала необходимо узнать использует ли вообще наша GIF прозрачность, это делается с помощью этой же функции. Полный алгоритм должен выглядеть приблизительно так:
PHP
//Создаем изображение, кстати для GIF можно использовать обычную imagecreate, но лучше все таки везде использовать imagecreatetruecolor
$destination_resource=imagecreatetruecolor($newwidth, $newheight);
//Получаем прозрачный цвет
$transparent_source_index=imagecolortransparent($source_resource);
//Проверяем наличие прозрачности
if($transparent_source_index!==-1){
$transparent_color=imagecolorsforindex($source_resource, $transparent_source_index);
//Добавляем цвет в палитру нового изображения, и устанавливаем его как прозрачный
$transparent_destination_index=imagecolorallocate($destination_resource, $transparent_color, $transparent_color, $transparent_color);
imagecolortransparent($destination_resource, $transparent_destination_index);
//На всякий случай заливаем фон этим цветом
imagefill($destination_resource, 0, 0, $transparent_destination_index);
}
//Ресайз
imagecopyresampled($destination_resource, $source_resource, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);
//Сохранение
imagegif($destination_resource, $destination_path);
1 |
//Создаем изображение, кстати для GIF можно использовать обычную imagecreate, но лучше все таки везде использовать imagecreatetruecolor $destination_resource=imagecreatetruecolor($newwidth,$newheight); $transparent_source_index=imagecolortransparent($source_resource); if($transparent_source_index!==-1){ $transparent_color=imagecolorsforindex($source_resource,$transparent_source_index); //Добавляем цвет в палитру нового изображения, и устанавливаем его как прозрачный $transparent_destination_index=imagecolorallocate($destination_resource,$transparent_color’red’,$transparent_color’green’,$transparent_color’blue’); imagecolortransparent($destination_resource,$transparent_destination_index); //На всякий случай заливаем фон этим цветом imagefill($destination_resource,,,$transparent_destination_index); } imagecopyresampled($destination_resource,$source_resource,,,,,$newwidth,$newheight,$oldwidth,$oldheight); imagegif($destination_resource,$destination_path); |
Можно конечно, чуть короче и проще, но на мой взгляд так намного нагляднее.