Обрезка изображений с помощью ImageMagic дает изображения неправильного размера — почему?

Есть куча изображений, которые представляют собой страницы, отсканированные из книги и уже обрезанные с помощью ImageMagic. Все они однородные, 629х625 пикселей. Мне нужно их дополнительно обработать, чтобы подготовить к созданию PDF: разбить на нечетные и четные страницы. Их имена от canvas-00.png до canvas-53.png

Когда я использую следующую команду, чтобы сначала получить нечетные страницы, я получаю полностью искаженные изображения 275x563 пикселей, извлеченные из неправильного горизонтального смещения:

convert canvas-??.png -crop 314x625+0+0 ~/Pictures/odd/canvas.png

Что я делаю не так?

PS: Первоначально изображения были больше, содержали дополнительные поля с видимой крышкой сканера, и я успешно обрезал их до 629x625 с помощью очень похожей команды, но, конечно, с ненулевым смещением +140+71. Поэтому меня сбивает с толку тот факт, что явно более тривиальная команда с нулевым смещением вообще не работает.


person ajeh    schedule 30.08.2016    source источник


Ответы (1)


Я подозреваю, что у вас есть "запомненные" смещения страниц в ваших PNG-файлах, и вам нужно их очистить.

В качестве примера создадим изображение размером 500x300 пикселей:

convert xc:red xc:lime +append \
   \( xc:blue xc:magenta +append \) -append -resize 500x300\! start.png

введите здесь описание изображения

Теперь давайте вырежем кусок ближе к нижнему правому углу, который я намеренно сделал пурпурным, чтобы вы могли видеть, какой кусок у меня получился:

convert start.png -crop 200x100+250+150 z.png

введите здесь описание изображения

Но если мы теперь посмотрим на это с помощью identify, вы увидите, что оно "помнит", где оно было на исходной картинке:

identify z.png

Вывод

z.png PNG 200x100 500x300+250+150 16-bit sRGB 51.1KB 0.000u 0:00.000

Это потенциально повлияет (т. е. испортит) все, что вы будете делать с изображением в будущем. Решение состоит в том, чтобы использовать +repage для сброса всей геометрии страницы и макета, чтобы он забыл. Вы можете сделать это либо при обрезке, либо при последующем использовании обрезанного изображения — в зависимости от того, хотите ли вы сохранить информацию об обрезке или нет. (Иногда вам это нужно, когда вы делаете головоломку и, возможно, хотите собрать части позже).

convert start.png -crop 200x100+250+150 +repage z.png
identify z.png
z.png PNG 200x100 200x100+0+0 16-bit sRGB 51.1KB 0.000u 0:00.000

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

convert canvas-??.png +repage -crop 817x1040+0+0 ~/Pictures/odd/canvas.png
person Mark Setchell    schedule 03.09.2016
comment
Итак, теперь, когда промежуточные изображения запомнили свою обрезку, как мне их очистить? Оригиналов у меня больше нет. - person ajeh; 03.09.2016
comment
Ничего, команда for i in *.png; do convert "$i" +repage "~/Pictures/cleared/$i"; done сделала свое дело. - person ajeh; 03.09.2016
comment
Спасибо!!!! Это ЕДИНСТВЕННЫЙ ответ, который я нашел, говоря о том, как преобразовать png, чтобы забыть его исходное положение. Теперь мне интересно, есть ли какая-нибудь идея, как сделать выбранный слой из файла psd, чтобы забыть его исходное положение. - person Ben P.P. Tung; 09.08.2017