Объедините JPEG разных размеров с jpegtran
Я успешно использовал jpegtran для объединения JPEG одинакового размера (512x512), используя метод, описанный в этом ответе stackru: /questions/8715215/obrezka-bez-poter-vyirezat-i-vstavit-dlya-jpeg/8715222#8715222
Это плиточные JPEG из интернета, которые в сочетании создают 360 панораму. Как я уже сказал, изображения 512x512 отлично сочетаются с jpegtran; однако я понял, что некоторые из плиток, составляющих панораму, имеют размер 256x256 и должны быть удвоены по размеру в сочетании с другими плитками для формирования панорамы (в 2D-форме равноугольной проекции).
Проще говоря, мне нужно знать, сможет ли jpegtran без потерь объединить два JPEG разных размеров, например, могу ли я без потерь удвоить разрешение плитки 256x256, а затем объединить ее с другой плиткой 512x512.
Я знаю, что это можно сделать с помощью перекодирования, но я спрашиваю, можно ли это сделать абсолютно без потерь. Благодарю.
1 ответ
Не сейчас, нет. Нам понадобится следующее:
- Обрезка без потерь - долго поддерживается
- SmartScale — обратите внимание, что это не соответствует стандарту ITU JPEG, изменит размер макроблоков в пикселях и не будет работать со многими декодерами.
- Возможность изменения размера макроблока на полпути через файл. Я предполагаю, что SmartScale не поддерживает это, но поддерживают некоторые новые форматы сжатия изображений/видео.
- Вспомогательное программное обеспечение - в настоящее время недоступно. Я протестировал последнюю доступную на данный момент версию JPEG-9e, которая не может добавлять файлы JPEG с разными коэффициентами SmartScale/размерами макроблоков.
Вот что я придумал, учитывая, что jpegtran
#start with two images
#512x512.jpg - 64x64 macroblocks
#256x256.jpg - 32x32 macroblocks
#uncrop 2x1x using libjpeg7+ to give us space for later.
#out.jpg resolution is 1024x512, 128x64 macroblocks
jpegtran -crop 1024x512+0+0 -outfile out.jpg 512x512.jpg
#upscale the 256px image to 512x512 using libjpeg8+'s SmartScale
#Note: Does not change image width/height in macroblocks!
#Note: Only changes width/height of macroblocks!
#upscale.jpg is 512x512 but still 32x32 macroblocks
jpegtran -scale 8/4 -outfile upscale.jpg 256x256.jpg
#drop in upscale.jpg on the right half of the output image.
jpegtran -drop +512+0 upscale.jpg -outfile out.jpg out.jpg
Однако последняя команда завершается с ошибкой: «Поддельный доступ к виртуальному массиву», что является строкой для
Это не удается, потому что
jpegtran ожидает, что изображение 512x512 пикселей будет состоять из макроблоков 64x64 с использованием размера макроблока целевого изображения, поэтому на полпути