Можно использовать nm -g
инструмент от binutils набора инструментальных средств. Однако их источник не всегда легко доступен. и я не на самом деле даже уверен, что эта информация может всегда получаться. Возможно objcopy
показывает дополнительную информацию.
РЕДАКТИРОВАНИЕ/: название инструмента, конечно nm
. Флаг -g
используется для показа только экспортируемых символов.
Причин может быть несколько.
I на самом деле не пробовал ваш пример ... не могли бы вы опубликовать файлы до и после? На самом деле, не имея возможности изучить файл результатов, трудно сказать, есть ли там эти дополнительные данные.
Изменить: Да, ясно, что ваши исходное и преобразованное изображения имеют разные цветовые профили. Java удалила исходный цветовой профиль и вместо этого использовала общий sRGB. Для нас они выглядят одинаково в Windows с Firefox и другими программами, потому что эти программы не используют цветовой профиль при визуализации. Однако на вашем Mac Mac фактически поддерживает эти цветовые профили (обсуждение на Mac для графики и т. Д.), Поэтому они отображаются по-разному. У меня под рукой нет Mac, но я подозреваю, что если вы откроете файлы в Photoshop на любой платформе, вы увидите разницу.
Возможно, вашему исходному изображению назначен цветовой профиль с гаммой шире, чем sRGB (например, Adobe RGB), и ваш цикл загрузки / сохранения не сохраняет информацию о цветовом пространстве? Без цветового профиля ваш зритель будет использовать sRGB, а сжатая гамма заставит все выглядеть «мля». Если у вас есть exiftool,
exiftool -ProfileDescription filename.jpg
- это быстрый способ проверить цветовые профили в исходных и выходных изображениях.
JPEG - это формат с потерями .
Это означает, что если вы откроете файл и сохраните его снова, вы потеряете некоторую информацию, если не выберете очень конкретную шаги, чтобы ничего не потерять (в этом случае возможные манипуляции очень ограничены).
Кроме того, ImageIO.write ()
, вероятно, использует некоторые настройки качества по умолчанию для сохранения файлов JPEG, которые могут быть ниже исходных , что приведет к дополнительной потере качества.
Попробуйте сохранить файл в формате PNG, и вы увидите, что он будет выглядеть так же, как исходный.
jpeg - это формат с потерями. При чтении java сохраняет его как необработанный формат, очень похожий на BMP. Затем он снова записывается, что приводит к потере данных. Кроме того, нет особого контроля над качеством, как при использовании чего-то вроде GIMP.
Возможно, стоит попробовать использовать другие API, например Image Magick , чтобы лучше контролировать качество.