Вы неправильно поняли значение аргумента +write
. Он не отменяет обработку вашего изображения, выполненную до операции записи, он отменяет только обработку , вызванную самой операцией записи.
например. Предположим, у вас есть изображение JPG, и вы делаете следующее:
convert original.jpg -scale 50% -write output1.gif output2.jpg
Что произойдет? convert
читает original.jpg
в память и сжимает его до половины разрешения. Теперь он должен записать его в output1.gif
, но, поскольку формат GIF поддерживает только изображения, основанные на палитре, он преобразует изображение в 256 цветов и запишет файл GIF. Теперь он возьмет текущее изображение, которое было уменьшено до 256 цветов, преобразует его обратно в настоящий цвет (24-битный RGB) и запишет его в output2.jpg
, поскольку файлы JPG не поддерживают изображения на основе палитры. Тем не менее, JPG будет выглядеть почти так же, как если бы вы конвертировали GIF-файл в JPG (он будет ограничен примерно 256 различными цветами).
Теперь давайте попробуем то же самое снова, но на этот раз мы сделаем следующее:
convert original.jpg -scale 50% +write output1.gif output2.jpg
Что произойдет? convert
читает original.jpg
в память и сжимает его до половины разрешения. Теперь он должен записать его в output1.gif
, однако, без его изменения , это то, что говорит +write
, поэтому он сначала клонирует изображение в памяти. Он преобразует клон в 256 цветов и записывает результат в output1.gif
. Затем он снова отбрасывает клон и продолжает обработку с изображением, которое имело до клонирования . Это изображение теперь записывается в output2.jpg
, что означает, что на этот раз output2.jpg
будет уменьшенной версией original.jpg
и не будет выглядеть как изображение на основе 256-цветовой палитры.
Ни при каких условиях операция масштабирования не отменяется, поскольку она совершенно не связана с операцией записи. Если вы хотите отменить операцию масштабирования, вам нужно либо сохранить изображение, масштабировать его, записать и затем восстановить, либо клонировать, масштабировать, записать и затем удалить клон. Любой способ должен быть одинаково быстрым, поскольку количество копий, выполняемых в памяти, в обоих случаях одинаково, отличается только синтаксис командной строки.