Существует ли программа или скрипт, который может читать изображение на стандартном вводе и записывать изображение с измененным размером на стандартный вывод, не ожидая EOF на стандартном вводе?Плохое качество приемлемо;ожидание загрузки всего изображения - не.
ImageMagick (convert
и stream
) прочитает, затем обработает, затем выведет.То, что я хочу, больше похоже на потоковый процессор в реальном времени: если я уменьшу на 50%, он должен выводить одну строку миниатюр для каждых двух строк ввода (примерно), независимо от состояния входного потока.
Если это еще не имеет смысла, представьте, что вы загружаете изображение через медленное сетевое соединение.Как только это возможно, браузер начинает отображать верхний край изображения.Если изображение больше окна, браузер уменьшает его до размера окна.Не нужно ждать загрузки всего изображения.
Вот некоторые инструменты, которые я использовал для тестирования.Это подает изображение на порт 8080 в десяти срезах с задержкой в одну секунду между срезами для имитации медленного сетевого подключения:
IMAGE=test.jpg; SLICES=10; SIZE=$(stat -c "%s" $IMAGE); BS=$(($SIZE / $SLICES + 1)); (echo HTTP/1.0 200 OK; echo Content-Type: image/jpeg; echo; for i in $(seq 0 $(($SLICES - 1))); do dd if=$IMAGE bs=$BS skip=$i count=1; sleep 1; done) | nc -lp8080 -q0
Запустите его и сразу же откройте localhost:8080
inваш браузер, чтобы увидеть изображение медленно загружается.Если вы передадите кусочки изображения на convert
или stream
вместо nc
(пропуская все эхо-сигналы), в течение десяти секунд не будет отображаться никакого вывода, а затем вы получите весь эскиз сразу.