@easycode
не боюсь задавать глупые вопросы ))

Как превратить белый фон в прозрачный у JPEG-картинки на сайте?

Есть куча студийных фотографий товаров на белом фоне - в формате JPEG.
Нужно чтобы эти фотографии на сайте отображались не с белым фоном - а с прозрачным.
Для нормальных браузеров действует CSS-код:
img { mix-blend-mode: multiply; }
но в проклятом IE это свойство не поддерживается - или есть хак-метод о котором я не знаю?

Также я пробовал c помощью PHP:
$im = imagecreatefromjpeg('1.jpg');
$black = imagecolorallocate($im, 250, 250, 250);
$bg_color = imagecolorat($im,1,1);
imagecolortransparent($im, $bg_color);
imagepng($im, '1.png');
imagedestroy($im);

фон обрезается с артефактами - ближе к объекту на фото появляются островки "белых обрезков"

Понятно что нужно будет пересохранять в PNG в итоге - но как это сделать программно?
  • Вопрос задан
  • 454 просмотра
Пригласить эксперта
Ответы на вопрос 4
kocherman
@kocherman
Команда должна работать на всех операционных системах. Требует установленный ImageMagick. Можно переделать в функции PHP, но мне лень.
convert source.jpg -fill none -fuzz 1% -draw 'matte 0,0 floodfill' -flop  -draw 'matte 0,0 floodfill' -flop dest.png

Фон берётся из пикселя [0,0], нахлест (fuzz) 1%.
Как применить команду в цикле пакетно?
Например так:
echo 'convert $1 -fill none -fuzz 1% -draw "matte 0,0 floodfill" -flop  -draw "matte 0,0 floodfill" -flop ${1%.*}.png' > ~/convert.sh
chmod +x ~/convert.sh
cd ~/Pictures
find -name '*.jpg' | xargs -L1 -P8 ~/convert.sh
rm ~/convert.sh

Скрипт уберет фон у всех картинок *.jpg в папке $HOME/Pictures в 8 потоков.
Ответ написан
Комментировать
HunteR-VRX
@HunteR-VRX
Помешанный на развитии
Воспользуйтесь сервисом removebg, или ему подобными. Это в случае, если для вас не является принципиальным выполнять такое преобразование в рамках собственноручного метода-кода
Ответ написан
PlugIN
@PlugIN
A Little Programmer
Может, действительно попробовать создать action обтравки в Photoshop и прогнать через него в качестве теста серию картинок?
Ответ написан
Комментировать
@e_shevtsov
$img = imagecreatefrompng($your_image); 

//или
//$img = imagecreatefromstring($your_image); 
//или
//$img = imagecreatefromjpeg($your_image); 
$white = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $white);
imagepng($img, $output_file_name);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы