2016-09-20 2 views
0

Я загрузил ImageMagick, чтобы я мог обрабатывать папки с изображениями на рабочем месте, обрезая их до размера, а затем нарезая их на 12 равных частей. Я могу выполнять каждую задачу индивидуально, но я бы предпочел выполнить ее в одной строке с использованием STDIN и STDOUT. Однако, даже просматривая ответы здесь и документацию на веб-сайте, я не собираюсь работать.Правильный синтаксис для STDIN/STDOUT в imagemagick

Я работаю в Windows Powershell. Вот что я пытался, работая с одним изображением:

convert -crop '5072x3552+87+0' image.jpg jpg:- | convert -crop '1268x1184' - jpg: - | convert -crop '1268x1030+0+0' - C:\folder1\folder2\folder3\square.jpg 

Это дает мне ряд ошибок:

convert.exe: нет декодирования делегата для этого формата изображения `» @ ошибки /constitute.c/ReadImage/508.

convert.exe: изображений не задано `jpg: - '@ error/convert.c/ConvertImageCommand/3253.

convert.exe: нет делегата декодирования для этого формата изображения `'@ error/составляют.c/ReadImage/508.

convert.exe: изображения не определено `C: \ Users \ lmcane \ Desktop \ Imagem \ Test \ leaf.jpg» @ ошибка/convert.c/ConvertImageCommand/3253

Я используя ImageMagick 7.0.2 в Windows 7. Windows PowerShell открывается как администратор.

Дополнительные указания по форматированию STDIN и STDOUT в imagemagick приветствуются.

Любая помощь приветствуется.

image for reference

process for single original image

+0

Думаю, вы делаете это сложнее, чем необходимо. Я понимаю, что у вас есть папка с изображениями, и все в порядке, но я не вижу, что вы пытаетесь сделать для каждого изображения. Можете ли вы объяснить это простым английским языком? Вы хотите обрезать его до какого размера? С чего начать? А затем разделите его на 12 равных частей - это 12 равных срезов на всю ширину inage? Или 12 ломтиков на всю высоту? Или 3x4? Или 4x3? Или 6x2? Каковы фрагменты, которые нужно назвать? –

+0

У меня есть отсканированное изображение с сеткой 3x4 на нем и некоторое превышение слева и внизу. Цель: извлечь каждую часть сетки. Шаг 1) удалите излишки слева и снизу с помощью урожая. Шаг 2) Используйте функцию обрезки плитки imagemagick, чтобы нарезать изображение на 12 частей. Шаг 3), некоторые цели требуют удаления нижней части каждого результирующего изображения. Это достигается за счет дальнейшего обрезки, что приводит к чистому изображению объекта в сетке. Высота/ширина пикселей на каждом шаге вычисляются таким образом, чтобы избыток не оставался для очистки из папки назначения. – MahiMai

+0

Можете ли вы разместить изображение? –

ответ

0

I попробовал бы сделать первую обрезку краев с помощью -fuzz (чтобы разрешить небольшие различия в цвете границы) и -trim. Это заставляет вас это:

convert grid.png -fuzz 30% -trim trimmed.png 

Тогда, я бы плитку 4x3 и перестраиваем изображения таким образом, они забывают свои позиции в исходном изображении:

convert trimmed.png -crop [email protected] +repage step2.png 

Теперь отрежьте вершины, основание и стороны и сохранить отдельные кадры 12:

convert step2.png -crop 130x100+20+20 f-%02d.png 

Теперь вы можете обрезать излишки, используя несколько иной пушок, как кажется, есть меньше изменений, чем в наружном краю исходного изображения.И я также поставил все команды вместе в одном, что делает все шаги для всех 12 изображений на одном дыхании:

convert grid.png -fuzz 30% -trim -crop [email protected] +repage -crop 130x100+20+20 -fuzz 5% -trim f-%02d.png 

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

+0

К сожалению, конечная комбинированная линия не работает. Честно говоря, я даже не понимаю результат, который я получил, но это очень, очень неверно. Выполнение строк в последовательности: первый шаг ничего не сделал. Второй шаг разделил изображение на 12, так что спасибо за то, что вы научили меня правильному синтаксису. третья строка дает мне смешной результат, но я думаю, что это должно быть потому, что вы использовали изображения, которые я разместил в качестве литерала по размеру. (реальные изображения намного больше.) В любом случае, похоже, что вы, возможно, дали мне достаточно синтаксической ссылки для продолжения. Я вернусь в любом случае! – MahiMai

+0

Это сработало! Вот строка, в которой я закончил: convert grid.jpg -crop 5072x3552 + 87 + 0 -crop 4x3 @ + repage -crop 1268x1030 + 0 + 0 C: \ users \ name \ desktop \ imagem \ test \ result.jpg Спасибо для вашей помощи! Итак, хотя мне не нужно было использовать STDIN/STDOUT в этом случае, не могли бы вы поделиться с ним правильным синтаксисом? – MahiMai

+0

Извините, я не знаю, что вы подразумеваете под * методом «STDIN/STDOUT» *, и я не понимаю, какой смысл использовать несколько команд 'convert', когда этого достаточно. –

0

Я не могу объяснить, почему convert бросает эти ошибки, но я был в состоянии получить его на работу, используя xwd в качестве транспортного формата:

convert -crop '5072x3552+87+0' image.jpg xwd:- | 
    convert -crop '1268x1184' xwd:- xwd:- | 
    convert -crop '1268x1030+0+0' xwd:- C:\folder1\folder2\folder3\square.jpg 
+0

Huh ... ну, это не вызывает никаких ошибок, но когда я меняю image.jpg на image _ *. Jpg, чтобы обрабатывать всю партию, я получаю только одно изображение в результате в целевой папке и файл называемый «xwd» в моем рабочем каталоге. Я должен получить 36 изображений в папке назначения. Каждое начальное изображение представляет собой сетку из 12 с избытком слева и внизу, которую я обрезаю на первом шаге, разделить на двенадцать на втором и обрезать часть нижней части в третьем.) То же самое, если я не пытаясь его выпустить. – MahiMai

Смежные вопросы