Libvips: Vips CLI указывает формат файла с каналами

Созданный на 6 мая 2016  ·  4Комментарии  ·  Источник: libvips/libvips

В imagemagick я могу читать и писать в каналы и указывать их формат:

cat in.jpg | convert JPG:- -resize 50% PPM:- | jpeg-recompress --ppm -q medium - out.jpg

В инструментах vips cli я могу использовать /dev/stdin или /dev/stdout, но, похоже, нет способа указать формат файла, который ограничивает то, что вы можете сделать, используя каналы в vips.

Было бы здорово, если бы vips позволяли указывать/переопределять загрузчик/сохранитель для входных и выходных изображений.

Пример синтаксиса:

cat in.jpg | vips resize -[load=jpeg] -[save=ppm] 0.5 | jpeg-recompress --ppm -q medium - out.jpg

Это также позволит объединить несколько операций vips cli без оплаты дискового ввода-вывода за запись в файлы .v.

enhancement

Самый полезный комментарий

Это добавлено в 8.9. Вы можете написать, например.

aws s3 cp s3://mybucket/input.jpg - | \
  vips thumbnail_source [descriptor=0] .jpg 128 | \
    aws s3 cp - s3://mybucket/output.jpg

Примечания к выпуску содержат дополнительную информацию:

https://libvips.github.io/libvips/2019/12/11/Что нового в 8.9.html

Все 4 Комментарий

Привет, Феликс, об этом немного говорили, есть даже экспериментальная ветка с поддержкой потоков:

https://github.com/jcupitt/libvips/tree/load-from-stream

Он может запустить эту программу C:

https://gist.github.com/jcupitt/ff21f5b8d1dd6ba54c6f

Он считывает серию изображений из сокета, обрабатывает их и отправляет в другой сокет, и все это без необходимости загрузки всего изображения. Цель состояла в том, чтобы поддерживать корзины AWS, но это будет работать и для каналов командной строки с небольшим объемом дополнительной работы.

Был долгий разговор по этому поводу:

https://github.com/lovell/sharp/issues/30

Я немного сдался, затем он немного сгнил, затем я попытался очистить его, чтобы подготовить к слиянию с мастером, и столкнулся с некоторыми проблемами. Нужно еще немного поработать :/

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

Основная идея состоит в том, чтобы иметь возможность установить загрузчик или заставку (или, грубо говоря, тип файла), когда его нельзя вывести из расширения файла. Я уверен, что есть больше проблем для типов файлов, которые требуют поиска, но, например. jpeg, png, ppm подойдут. Это также было бы полезно, когда есть несколько реализаций, которые могут создавать или загружать файлы одного и того же типа. Например, PDF можно загрузить с помощью pdfload или magickload.

Я думаю, вам понадобятся потоковые материалы для работы /dev/stdin. Например, это не удается:

$ cat k2.jpg | vips jpegload /dev/stdin x.jpg
VipsJpeg: Not a JPEG file: starts with 0x87 0xe5
...

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

Это добавлено в 8.9. Вы можете написать, например.

aws s3 cp s3://mybucket/input.jpg - | \
  vips thumbnail_source [descriptor=0] .jpg 128 | \
    aws s3 cp - s3://mybucket/output.jpg

Примечания к выпуску содержат дополнительную информацию:

https://libvips.github.io/libvips/2019/12/11/Что нового в 8.9.html

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

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

AKlein920 picture AKlein920  ·  3Комментарии

binarykitchen picture binarykitchen  ·  3Комментарии

adamu picture adamu  ·  3Комментарии

kloczek picture kloczek  ·  3Комментарии

codecitizen picture codecitizen  ·  4Комментарии