Как уменьшить размер файла без потери качества или разрешения?

У меня есть более 2300 изображений, которые я хочу перенести на свой телефон, но в исходном размере они занимают много места (6,44 ГБ), и я хотел бы обрезать их без ущерба для качества или разрешения. Я знаю, что это можно сделать под Linux с помощью чего-то вроде pgncrush. В настоящее время у меня есть доступ к системе Windows, и все файлы в формате jpeg.

Как это сделать?

Будут ли копии изображений на телефоне просматриваться только на экране телефона, или вы захотите распечатать/поделиться ими с телефона на какой-либо другой дисплей?
Только на экране телефона.
Здесь на ум приходит термин « ТАНСТАФЛ ». Приложив немного усилий, вы можете запустить все эти утилиты Linux в Windows. Но в целом они либо дадут небольшую экономию, либо потребуют снижения разрешения или качества изображения.
@Bran В этом случае я предлагаю уменьшить разрешение, как предложил woliveirajr . Я не вижу особых причин иметь разрешение изображения больше, чем разрешение экрана телефона.
Это не утка, это лебедь!
У меня не хватило «баллов» или чего-то еще, чтобы ответить на мой собственный вопрос. Я попробую еще раз. @SteveKemp да, наверное. :)
У вас всегда должно быть достаточно репутации, чтобы ответить на свой вопрос. Этот ответ, вероятно, принесет вам больше репутации.
Вы дважды разместили одно и то же изображение. Разницы не видно, так как файлы изображений полностью идентичны до последнего бита. Если вы опубликуете настоящее оригинальное и сжатое изображение, мы сможем их сравнить.
@Guffa Я не публиковал одно и то же изображение дважды ... зачем мне это делать? Вы можете загрузить изображения отдельно на свой компьютер и проверить размеры. i.stack.imgur.com/Lz2Ii.jpg i.stack.imgur.com/VqHjK.jpg В качестве альтернативы вы можете скомпилировать и установить инструмент, о котором я упоминал в своем ответе, и попробовать его самостоятельно.
Я не знаю, почему вы разместили одно и то же изображение дважды. Я загрузил изображения и сравнил содержимое файлов, и они были полностью идентичными. Я скачал изображения, на которые вы сейчас ссылаетесь, и они также полностью идентичны.
В зависимости от исходного формата вы можете выбрать лучший алгоритм сжатия без потерь. Или, скорее, нет.
Имейте в виду, что на загрузку (ваш любимый хост изображений здесь) может повлиять повторное сжатие изображения для вас, что может сделать сравнения бесполезными.
Насколько я понимаю, flickr не сжимает и не конвертирует его, а другие сайты, такие как imgur, делают это.

Ответы (10)

Размер файла, качество, разрешение — выбирайте любые два.

Если у вас есть изображения в несжатом формате, таком как BMP, вы можете сделать их немного меньше, не жертвуя качеством или разрешением, сохранив их в сжатом формате, который не выполняет сжатие с потерями, например PNG-24.

Изображения JPEG уже сжаты, поэтому с заданным качеством и результатом они уже настолько малы, насколько это возможно. Таким образом, если вы хотите уменьшить размер файла, вам придется пожертвовать качеством или разрешением.

Поскольку вы собираетесь показывать изображение на телефоне, вы можете немного пожертвовать качеством, не получив заметной разницы. Если изображения в формате JPEG сохранены с качеством 100, вы можете попробовать сделать копию, например, с качеством 80, и посмотреть, достаточно ли этого для ваших нужд.

Если разрешение изображений выше, чем разрешение экрана вашего телефона, вы будете использовать это дополнительное разрешение только при увеличении изображения. В этом случае уменьшение разрешения только ограничит масштабирование.

иногда заархивирование или разархивирование их может немного сжать jpg.
@MichaelNielsen: Тогда это, вероятно, потому, что оно содержит несжатые метаданные, поэтому сохранение изображения без метаданных сделает его еще меньше.
Было бы действительно глупо удалять метаданные из вашей собственной базы данных.
@MichaelNielsen: Да, но вы упускаете суть. Метаданные являются причиной того, что в файле есть сжимаемые данные.
Существуют и другие форматы помимо JPG, которые могут храниться более эффективно, чем JPG, поэтому, конвертируя в один из них, вы можете добиться лучшего сжатия без ощутимой потери качества. Больше информации в моем ответе ниже photo.stackexchange.com/a/79086/4272

Начнем с понятия: компрессоры могут уменьшить размер чего-либо (например, текстового файла), обрабатывая его и представляя ту же информацию с использованием меньшего количества символов. Это то, как Zip уменьшает размер текстового файла. Это сжатие без потерь.

Изображения и аудио (и, следовательно, видео) используют очень большой объем информации: например, 5-мегапиксельная картинка в формате, который ничего не сжимает (например, TIFF), займет 5 мегабайт x 3 цвета *RGB) = 15 МБ места.

Чтобы уменьшить размер файла, формат JPEG приводит к потере некоторой информации об изображении: будь то качество, цвета и т. д. Вот почему вы можете открыть файл JPEG в какой-либо программе для редактирования фотографий (Photoshop, Gimp и т. д.), а затем сохранить его с помощью меньшее качество: он будет использовать меньше информации для представления вашего изображения с меньшим размером файла, но потеряет некоторое качество. Если вы (или любой другой человек) сможете заметить низкое качество, это важный момент при выборе «сколько сжатия» вы хотите.

Итак: в общем, для практических целей вы потеряете много качества, чтобы уменьшить размер изображения JPEG, потому что оно уже сжато.

Но вы хотите использовать это в своем мобильном телефоне, верно?

Вы не сказали, какой у вас мобильный телефон. Предположим, у вас есть Samsung Galaxy S3 . Вы можете ознакомиться с его характеристиками: разрешение экрана 1280x720 точек.

Таким образом, когда вы просматриваете изображение в нем, исходный размер изображения не имеет значения: вы сможете увидеть 1280x720 пикселей, потому что это максимальное количество пикселей, которое может отображать ячейка.

Если вы сделаете все свои фотографии, измените их размер до 1280x720 пикселей и откроете в своем телефоне, вы увидите их так же, как и в исходном разрешении. Вы потеряете «разрешение» исходного изображения, но это то, что вы все равно не сможете увидеть на своем телефоне...

Как вы делаете это в Windows : используйте любую программу, которая может редактировать изображения: Photoshop, Gimp, IrfanView... но поскольку вы говорите о том, чтобы делать это с большим количеством файлов, вероятно, вы думаете об ImageMagick. или аналогичная программа, которая может выполнять ту же операцию с большим количеством файлов.

Изменить: сделать это с помощью ImageMagick:

1 - скопируйте все свои изображения в новую папку (например, Temp1), чтобы не потерять оригиналы.

2 - создайте новую папку, в которой будут храниться ваши изображения после изменения размера (например: Temp2)

3 - открыть cmdокно, перейти в каталог со скопированными картинками (Temp1)

4 - тип:

mogrify -path full_path_to_Temp2 -resize 1280x720 *.jpg

Это то, что я искал. Вы также правильно угадали мой телефон, это S3. Я загружаю imagemagick прямо сейчас. какой будет команда изменить размер изображения всех файлов в одной папке на 1280x720?
В wordpress я использую плагин для автоматического изменения размера загружаемых изображений. Он использует утилиту на стороне сервера, называемую littleutils ( sourceforge.net/projects/littleutils ). Я хотел использовать что-то подобное. Это заставляет меня поверить, что можно сжать jpeg еще больше без потери качества или уменьшения разрешения. В настоящее время большинство моих изображений имеют размер 2305x3072 или 2592x1944.
Я нашел это на linux manpagez.com/man/1/opt-jpg
о, так вы готовы пожертвовать разрешением?
Желательно нет. Я собираюсь сравнить и посмотреть, если это имеет большое значение. Я ищу инструмент opt-jpg, который я связал, который сжимает изображения без ущерба для разрешения (я использовал его в своем блоге WordPress, и он автоматически сжимает jpeg на стороне сервера). но я не пробовал его отдельно, так что я мог бы попробовать.
Хотя я согласен со всем сказанным здесь, я хотел бы отметить, что, хотя многие люди показывают фотографии на своем телефоне, им также нравится увеличивать масштаб, чтобы показать части изображения более подробно. Если вы сделаете это, но понизите разрешение изображения до разрешения экрана телефона, вы ЗАМЕТИТЕ разницу, поскольку теперь вы показываете меньшую область при разрешении телефона, но вы уже потеряли эти пиксели. Просто мысль.
@ AK4749 согласен на 100% с вашим наблюдением, и я сомневался, следует ли мне включать это наблюдение, когда я отвечал на него, или нет ... пожалуйста, отредактируйте его, если хотите.

Вы можете получить оптимизацию без потерь (на основе оптимизации таблиц Хаффмана). Утилита jpegoptim предоставляет этот алгоритм.

Установите его с помощью (в Debian):

apt-get install jpegoptim

Чтобы запустить симуляцию (режим без действий):

jpegoptim -n -p dsc07844.jpg

возвращает:

dsc07844.jpg 3872x2592 24bit Exif  [OK] 3057132 --> 2518805 bytes (17.61%), optimized.

Чтобы оптимизировать:

jpegoptim -p dsc07844.jpg

Он сохраняет метаданные exif

А, ну вы сами себе ответили, но изменили свои требования. «Без потери качества» и «без потери качества для невооруженного глаза» для изображений сильно различаются.

Кроме того, PNGcrush и opt-jpg работают совершенно по-разному; отметив это только потому, что вы упомянули PNGcrush в своем OP. PNGcrush оптимизирует только метаданные об изображении, а не само изображение. Вот почему вы обычно получаете только 1-2%.

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

Ответ на ваш первоначальный вопрос заключается в том, что вы не можете значительно уменьшить размер файла, не влияя на какое-либо качество (за исключением ранее упомянутой экономии 1-2% за счет сжатия метаданных или тегов). т . е. путем удаления данных EXIF ​​и т. д., в зависимости от формат файла (RAW, TIFF, JPEG).

Чтобы реально уменьшить размер файла, вы должны либо потерять качество, либо разрешение, либо и то, и другое. Если бы это было не так, фотограф не стал бы обрабатывать в RAW.

Учитывая разрешение и уровень качества, существует несколько других форматов файлов изображений, которые могут дать эквивалент, но хранить данные более компактно, чем старый стандартный JPEG.

Некоторые варианты включают

  • JPEG2000 , идентифицируемый расширением .jp2, является несколько более старым форматом, который никогда не становился популярным. Он использует вейвлет-преобразования, а не DCT (дискретное косинусное преобразование) в формате jpeg, что приводит к менее очевидным артефактам, что обеспечивает большее сжатие с сопоставимым воспринимаемым качеством. Они претендуют на 20% преимущество. https://en.wikipedia.org/wiki/JPEG_2000

  • WebP от Google использует более продвинутые алгоритмы (если я правильно понимаю, это аналог лучшего на сегодняшний день сжатия видео H.265 по сравнению с MPEG), которые, как они утверждают, могут сэкономить 40% при эквивалентном качестве. http://www.cnet.com/news/google-offers-jpeg-alternative-for-faster-web/# !

  • BPG (от «лучшей переносимой графики») — это новая разработка с открытым исходным кодом. По своему подходу он похож на WebP, с дополнительными преимуществами, такими как лучшая битовая глубина и динамический диапазон, но на сегодняшний день он менее совместим с различным программным обеспечением. http://bellard.org/bpg/

Если вам нужны подробные сведения о том, как эти и некоторые другие сравниваются, вы можете увидеть диаграммы и графики здесь: https://people.mozilla.org/~josh/lossy_compressed_image_study_july_2014/

Вам нужно «сжать» папку — есть разные способы сделать это — классический способ — «заархивировать» их.

В Windows (начиная с XP) щелкните правой кнопкой мыши содержащую папку, нажмите «Отправить в», затем «Сжатая папка».

Это должно уменьшить размер папки и сохранить ее как ZIP-файл.

ОДНАКО - файлы Jpeg уже сжаты в своей собственной кодировке, поэтому окончательный сжатый файл может на самом деле не сильно отличаться.

Если я заархивирую их, я не смогу просмотреть их на своем телефоне, куда я буду их передавать. Я знаю, что есть способ сделать это индивидуально. Мне нужен способ сделать это за один раз. Желательно под окнами.
Хорошо, я понимаю - хм, если их нужно сохранить в формате jpg, не жертвуя качеством или разрешением, я не думаю, что вы сможете это сделать. Если вы хотите НЕМНОГО понизить качество, чтобы разница не была очевидной, то вы можете легко сэкономить приличное количество размера.

Вы можете использовать программу под названием Moo0 Image Sizer , которая позволяет изменять размер сразу нескольких изображений (по состоянию на 15 декабря 2012 г. доступны форматы jpg, png, bmp и gif).

Программа бесплатна для некоммерческого использования.

Привет, Э. Фишер, добро пожаловать на сайт. Я думаю, было бы полезно дополнить ваш ответ еще некоторыми и подтвержденными подробностями.

Я нашел ответ, который искал. Ответ opt-jpg для Linux. Я не нашел его в репозитории Ubuntu. Поэтому вам нужно загрузить исходный код littleutils ( http://sourceforge.net/projects/littleutils/ ), в который включен opt-jpg.

Для установки из исходников. Загрузите Tar с помощью wget и:

tar jxvf littleutils-1.0.27.tar.bz2 && cd littleutils-1.0.24

...

./configure --prefix=/usr && make && make install && make install-extra

Вы должны быть root такsudo su

Например, я использовал изображение утки. Размер неоптимизированного файла составляет 1,1 МБ, после оптимизации его размер составляет 991 КБ без потери качества изображения (невооруженным глазом) или изменения разрешения изображения. Может показаться, что разница невелика (уменьшение на 108 КБ), но с 2300+ изображений и размером в среднем 6,44 ГБ при таком же уменьшении размера может получиться много места.введите описание изображения здесь

Вы можете увидеть исходное изображение утки, загруженное на flickr:введите описание изображения здесь

И оптимизированный:введите описание изображения здесь

Может ли невооруженным глазом заметить разницу?

Что касается того, сколько места я на самом деле сэкономил. Вам придется подождать некоторое время, потому что мне придется позволить ему работать, когда я не использую комп. Это займет некоторое время, и я не забуду отчитаться.

Просто чтобы сообщить людям, сколько места я сэкономил. Это заняло около 25 минут, и я сэкономил около 200 МБ.
Итак, 3% экономии в целом?
Кстати, вы знаете, что это лебедь, а не утка, верно?
@mattdm Да, не так уж и много, но теперь я знаю, что это можно сделать, а не совсем "TANSTAAFL" :)
@RowlandShaw Да, я это понимаю, но слишком ленив, чтобы это изменить :)
Ну, я не уверен, что назвал бы 3% "обедом". Может быть, это очень легкая закуска. :)
Невооруженным глазом нельзя увидеть разницу, когда вы уменьшаете разрешение, чтобы оно соответствовало телефону, и если вы понизите качество с 12 до 8. Вместе эти две вещи сэкономят вам 75%, а не 3% размера файла. , собирая всю коллекцию под концерт, и невозможно сказать, не увеличивая масштаб. (Не уверен, с каким параметром качества они были изначально сохранены, но обычно вы можете уменьшить размер изображения HD до 250 КБ или около того, и все равно выглядит великолепно).
Первое, что нужно сделать при сравнении качества, — это, ну, количественно определить, что вы имеете в виду, а затем измерять, измерять, измерять. Хорошее обсуждение слайдера Lr JPEG здесь: regex.info/blog/lightroom-goodies/jpeg-quality

в Windows я использую программу под названием RIOT (инструмент радикальной оптимизации изображений). Пока это лучшее, что я знаю.

http://luci.criosweb.ro/riot/

«Image Resizer for Windows» — отличная бесплатная утилита размером менее 1 МБ для пользователей Windows. Все изображения размером 5 МБ или 10 МБ можно уменьшить до размера менее 200 КБ с почти одинаковой четкостью. Проблема в том, что эти 10-мегабайтные изображения имеют разрешение 4000 X 3000, но ваш телефон или компьютер — это только треть этого разрешения, что делает его почти таким же. Поэтому, если вы не собираетесь печатать какие-либо из них, я рекомендую сжимать ваши изображения с помощью этого очень простого инструмента. Просто выберите все файлы, щелкните правой кнопкой мыши и скажите «Изменить размер». Он преобразует 100 изображений менее чем за минуту.