Автоматизация: удаление фона у большого числа изображений

  • Автор темы Автор темы Cyrax
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Автоматизация: удаление фона у большого числа изображений

Cyrax сказал(а):
ACDSee прозрачный фон белым цветом отображает, Bridge - тоже. А в шопе все картинки открывать - поседеешь...
Еще есть бесплатный XnView - у него окно просмотра имеет серый фон и прозрачные области изображения хорошо видны.
 
Ответ: Автоматизация: удаление фона у большого числа изображений

"для некоммерческого использования", Вы забыли добавить.

Тогда уж встроенный в виндовс "Picture Viewer" показывает, в режиме слайд-шоу, прозрачные области черным цветом. Ну а хотите чекерборд -- пожалуйста, стандартный в ubuntu просмотровщик (Еуe of GNOME), с возможностью настраиваемого слайд-шоу. Или ImageMagick Display. Причем, последний ubuntu запускается как виртуальная машина в винде. Сложно ниасилить (или отмазаться отсутствием времени или свободного раздела на винчестере).

Ах да, служебное положение обязывает: если бросить 700 png в 9й акробат, он предложит создать единый документ (метка страницы - имя исходной картинки), который можно листать хоть вручную, хоть auto-advance + loop. Чекерборд вместо прозрачности включается в префах.

По поводу алгоритма "разделения" -- он есть у меня (прототип), но я думал кто чего интересное предложит. Все делается операциями threshold, solarize, floodfill. Аттач.

p.s. картинки в 31м сообщении разделены, собственно, этим скриптом
 

Вложения

  • 2.png
    2.png
    32.2 КБ · Просм.: 1 104
Ответ: Автоматизация: удаление фона у большого числа изображений

1998
Ваша технология позволяет автоматизировать вставление каждого отдельного объекта в индивидуальный файл или только вырезает их (эти объекты) из фона, оставляя в пределах одного файла? Если да, то объясните подробнее для любителей.
Спасибо!
 
Ответ: Автоматизация: удаление фона у большого числа изображений

А не получатся ли после threshold'а слишком рваные границы?

4 и 5 шаги это как?
 
Ответ: Автоматизация: удаление фона у большого числа изображений

Kolobokk, как сделаем, так и будет. Немного подробностей ниже.

similideus, если что-то рваное, то дорабатываем алгоритм (это же прототип). Или дописываем новый в хвост к существующему, т.к. пока все изменения были неразрушающие. Сканируем маску (3) (через 10 пикселов -- более чем достаточно). Если пиксел черный, дублируем маску, floodfill with white (5) + threshold + extract n-th region. Трюк в том, что оригинал заливаем floodfill with background и продолжаем сканировать с этой точки (вот это место мне нравится :) )

В общем, ниже скрипт, как был исходный от 23 числа, есть непринципиальные отличия от приведенной схемы. Наверное, можно переделать 1:1 в JS для фотошопа

Код:
#!/usr/bin/perl

use strict;
use warnings;
use Image::Magick;

die "Usage: extractor picture_name\n" if ($#ARGV == -1);
my $image = Image::Magick->new;
die "Invalid image\n" unless (0 + $image->Read($ARGV[0]));
(my $w, my $h) = $image->Get('width', 'height');

my $mask = $image->Clone();
$mask->BlackThreshold(255);
$mask->Set(type=>'Grayscale');
$mask->Draw(primitive=>'color', points=>'0,0', method=>'Floodfill', fill=>'gray(128)');
$mask->Solarize(128);
$mask->WhiteThreshold(127);

my $n = 0;
for (my $y = 0; $y < $h; $y = $y+10) {
    for (my $x = 0; $x < $w; $x = $x+10) {
        if (($mask->GetPixel(x=>$x, y=>$y))[0] == 0) { 
            my $m = $mask->Clone();
            $m->Draw(primitive=>'color', points=>"$x,$y", method=>'Floodfill', fill=>'gray(128)');
            $m->Solarize(128);
            $m->WhiteThreshold(127);
            $m->Set(type=>'Grayscale');
            
            my $tmp1 = $image->Clone();
            $tmp1->Draw(primitive=>'color', points=>"0,0", method=>'Reset', fill=>'white');
            $tmp1->Composite(image=>$m, compose=>'CopyOpacity');
            $tmp1->Composite(image=>$image, mask=>$m, compose=>'Copy');
            $tmp1->Trim;

            die "Can't save\n" unless (0 + $tmp1->Write(substr($ARGV[0], 0, -4).sprintf("%03d", $n++).".png"));
            $mask->Draw(primitive=>'color', points=>"$x,$y", method=>'Floodfill', fill=>'gray(255)');
            undef $m;
            undef $tmp1;
        };
    };
};
 
Ответ: Автоматизация: удаление фона у большого числа изображений

Кроп и страйтен поворачивает хоть ты тресни. Причем есть опция - нажатый Alt - но она избавляет вас от кропа, а не от страйтена.

За время толкотни на форуме автор давно бы нарезал свои пикчи слайсами и через саве фор уеб сохранил в гифах выбирая нужные слайсы прямо в интерфейсе саве фор уеб.

Что касается сделать белый прозрачным - то прямо в саве фор уеб можно это сделать - сказать что белый бует транспарент. Конечно, он будет везде транспарент, поэтому с этим вопросом лучше обращаться к рукояткам.
 
Статус
Закрыто для дальнейших ответов.