Я ищу быстрый способ получить высоту и ширину изображения в пикселях. Он должен обрабатывать как минимум JPG, PNG и TIFF, но чем больше, тем лучше. Я подчеркиваю быстро, потому что мои изображения довольно большие (до 250 МБ), и требуется слишком много времени, чтобы получить размер с ImageMagick, identify
потому что он, очевидно, сначала читает изображения в целом.
Предпочтительно, я ищу способ, который хорошо работает в Ruby или даже в Rails 3.
Я знаю теоретические вещи (различные форматы изображений, их заголовки и различия и т. Д.). Действительно, я прошу какую-то библиотеку, которая может решить мою проблему довольно общим способом.
Я только что нашел imagesize, который выглядит многообещающе, хотя разработка кажется мертвой.
Ответы:
Команда
file
печатает размеры для нескольких форматов изображений (например, PNG, GIF, JPEG; последние версии также PPM, WEBP) и читает только заголовок.identify
Команда (от ImageMagick) печатает много информации изображений для широкого спектра изображений. Кажется, что ограничивается чтением заголовка (см. Комментарии). У этого также есть унифицированный вывод, которого, кfile
сожалению, не хватает.exiv2
дает вам размеры для многих форматов, включая JPEG, TIFF, PNG, GIF, WEBP, даже если заголовок EXIF отсутствует. Неясно, читает ли он все данные для этого все же. Смотрите man-страницу exiv2 для всех поддерживаемых форматов изображений.head -n1
даст вам размеры для форматов PPM, PGM.Для форматов, популярных в Интернете, оба
exiv2
иidentify
сделают свою работу. В зависимости от варианта использования вам может потребоваться написать собственный скрипт, который объединяет / анализирует выходные данные нескольких инструментов.источник
Я не уверен, что у вас установлен php, но эта функция PHP очень удобна
источник
Вы можете использовать функцию идентификации ImageMagick . Вот как вы это делаете в bash (примечание: $ 0 - это путь к изображению):
И это также скрывает любые потенциальные сообщения об ошибках. Современные реализации
identify
читают только заголовок, а не все изображение, поэтому это быстро. Не уверен, как это по сравнению с другими методами, хотя.источник
read width height < <(identify -format "%w %h" "${1}")
https://joseluisbz.wordpress.com/2013/08/06/obtainment-size-or-dimension-of-images/ (BMP, PNG, GIF, JPG, TIF или WMF)
Здесь для двух форматов PNG и JPG.
Мой код из класса, предназначенного для моего использования, вы можете редактировать в соответствии с вашими потребностями.
Пожалуйста, проверьте эти функции / метод, используя PHP :
Используя код PHP:
Теперь эти функции / метод с использованием JAVA :
Используя код Java:
источник
ref
/out
параметров в Java - это считается наилучшей практикой?Я полагаю, вам нужны размеры в пикселях (ширина и высота)?
Я думаю, что большинство форматов файлов имеют некоторую информацию заголовка, определяющую размеры, так что программа, читающая файл, может знать, сколько места она должна зарезервировать, прежде чем начать чтение файла. Некоторые форматы файлов «необработанного» типа могут быть просто потоком байтов с некоторым байтом «конца строки» в конце каждой горизонтальной строки пикселей (в этом случае программное обеспечение должно прочитать первую строку и разделить размер потока байтов). по длине линии, чтобы получить высоту).
Я не думаю, что вы можете сделать это каким-либо «общим» способом, так как вам нужно понимать формат файла (или использовать библиотеку, конечно), чтобы знать, как его читать. Вы, вероятно, можете найти некоторый код, который в большинстве случаев даст приблизительную оценку измерений без чтения всего файла, но я думаю, что некоторые типы файлов могут потребовать, чтобы вы прочитали весь файл, чтобы быть уверенным, какие измерения у него действительно есть. Я ожидаю, что большинство веб-ориентированных графических форматов имеют заголовок с такой информацией, чтобы браузер мог создавать размеры блоков до загрузки всего изображения.
Я предполагаю, что хорошая библиотека будет иметь несколько методов для получения размеров файлов, которые она обрабатывает, и что эти методы будут реализованы максимально эффективно.
Обновление : imageinfo, кажется, делает то, что вы хотите. (Еще не проверял)
источник
Если у вас есть информация EXIF на изображениях, вы можете просто прочитать заголовок EXIF.
источник
-ping - это вариант, который, похоже, для этой цели введен.
Однако с ImageMagick 6.7.7 я не наблюдаю замедления даже для каждого большого файла, например:
Можете ли вы привести пример входного изображения, для которого оно все еще медленное?
источник
tldr: файл "imagename" подойдет
работает с webp, все форматы jpg (jpeg, jpg200, ..),
Пример вывода выглядит как
загрузить вывод файла в список Python и использовать 4-е поле в списке.
К вашему сведению, было оптимизировано около 18000+ изображений для сокращения сетевого трафика.
источник