Пакетный процесс сглаживания прозрачного GIF в PNG

У меня есть большое количество изображений, которые сначала имели черный фон, затем сплошной черный цвет был удален, оставив изображение с пикселизированными темными краями.

Я ищу способ пакетной обработки этих изображений, чтобы либо стереть черные пиксели, прилегающие к прозрачным пикселям, либо сгладить края, оставив черные края не такими зубчатыми.

У меня были xnview, irfanview и GIMP, но я не могу найти подходящий способ сделать это, кроме как вручную с помощью GIMP, используя волшебную палочку на прозрачной области, увеличивая ее на один пиксель и удаляя черный цвет.

Есть идеи? Я говорю о более чем 800 изображениях, поэтому пакетная обработка очень важна. Они автоматически генерируются из 3D-моделей.

Я буду продолжать смотреть вокруг в то же время!


person Radley Sustaire    schedule 29.03.2011    source источник


Ответы (1)


Photoshop поддерживает сценарии, и, насколько мне известно, gimp тоже. В Photoshop есть ссылки на скрипты для vbscript, javascript и apple(script?), а также образцы, спрятанные в установленных папках в формате PDF. Проверьте документы.

Я списал метод выбора прозрачности из сообщения на форуме и перенес его в vbscript. Он создает временное действие, которое затем выбирает прозрачность текущего слоя в (передаваемой) текущей ссылке приложения. Основы открытия файлов, сохранения файлов и т. д. описаны в справочных материалах.

Приведенный ниже пример vbscript найдет Photoshop, выведет его на передний план, а затем попытается загрузить прозрачность в открытом в данный момент документе. Obvious Man говорит, что это не удастся, если вы еще не открыли PS и не загрузили документ или если к вашему документу не применена прозрачность. YMMV.

Set appRef = CreateObject("Photoshop.Application")
appRef.BringToFront
loadTransparency appRef

    function loadTransparency(appRef)
        dim desc
        dim ref
        dim ref1

        set desc = CreateObject( "Photoshop.ActionDescriptor" )
        set ref = CreateObject( "Photoshop.ActionReference" )
        ref.putProperty appRef.charIDToTypeID( "Chnl" ), appRef.charIDToTypeID( "fsel" ) 
        desc.putReference appRef.charIDToTypeID( "null" ), ref 

        set ref1 = CreateObject( "Photoshop.ActionReference" )
        ref1.putEnumerated appRef.charIDToTypeID( "Chnl" ), appRef.charIDToTypeID( "Chnl" ), appRef.charIDToTypeID( "Trsp" )
        desc.putReference appRef.charIDToTypeID( "T   " ), ref1 

        appRef.ExecuteAction appRef.charIDToTypeID( "setd" ), desc, 3   '3 = no dialogs

    end function
person horatio    schedule 29.03.2011
comment
Обратите внимание, что более быстрым способом было бы создать действие, в котором вы делаете волшебную палочку в пикселе 1,1, затем расширяете на 1 пиксель, затем сохраняете для Интернета с настройками png в другую папку, затем пакетно, но это предполагает, что пиксель в этом расположение всегда прозрачно. - person horatio; 29.03.2011
comment
Хотя косвенно вы направили меня в правильном направлении. Нашел много информации об автоматизации GIMP. Я думаю, что написание сценария займет некоторое время, но в целом я уверен, что это будет быстрее, и, по крайней мере, я извлеку из этого уроки. - person Radley Sustaire; 30.03.2011
comment
Да, я помню, что на их справочных HTML-страницах была некоторая информация. Я никогда не углублялся в это, так как я использую фотошоп. Я бы никогда не ответил, если бы вы не пометили это PS. Рад, что вы стали на шаг ближе. - person horatio; 30.03.2011