Необычный png-файл на дисплее iOS

В этом сообщении мне было интересно, почему мои png-файлы плохо отображались на дисплеях Retina.

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

Как было предложено в этом посте, я использовал команду sips, чтобы увидеть, из чего именно был сформирован мой PNG-файл. У меня original-image.png (с глюком) и photoshoped-image.png

Команда

sips original-image.png -g all

Дает мне

  pixelWidth: 256
  pixelHeight: 256
  typeIdentifier: public.png
  format: png
  formatOptions: default
  dpiWidth: 72.000
  dpiHeight: 72.000
  samplesPerPixel: 3
  bitsPerSample: 8
  hasAlpha: no
  space: RGB

И

sips photoshoped-image.png -g all

Дает мне

  pixelWidth: 256
  pixelHeight: 256
  typeIdentifier: public.png
  format: png
  formatOptions: default
  dpiWidth: 72.000
  dpiHeight: 72.000
  samplesPerPixel: 4
  bitsPerSample: 8
  hasAlpha: yes
  space: RGB
  profile: HD 709-A

Итак, 3 отличия:

  • образец на пиксель
  • hasAlpha
  • у отфотошопленного файла есть профиль.

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

Есть идеи ?


person Martin    schedule 23.07.2012    source источник


Ответы (2)


Таким образом, используя sips, вы можете вывести другой файл. Возьмите файл фотошопа и начните его модифицировать. Сначала удалите профиль, затем удалите альпа-канал (который повлияет на первые две переменные).

Вполне возможно, что этот образ работает. У PNG есть много параметров, и исходное изображение может иметь некоторые другие функции, невидимые с помощью этих инструментов. Photoshop, очевидно, полностью переписывает изображение, используя значения RGB в качестве единственного общего атрибута между файлами.

Я подозреваю, что когда вы сделаете вышеописанное, этот образ тоже будет работать. В оригинале есть что-то странное.

В любом случае на iOS вам будет проще, если вы используете png с альфа-каналом, так как он преобразует их в один, если базовое изображение его не имеет.

person David H    schedule 23.07.2012
comment
Как удалить альфа-канал? sips 1.png -s hasAlpha no не работает, так как hasAlpha доступен только для чтения (developer.apple.com/library/mac/#documentation/Darwin/Reference/) - person Martin; 23.07.2012
comment
Я полагаю, что вы можете использовать samplePerPixel=3 для этого или что-то в этом роде. Погуглите об использовании глотков или экспериментов — поначалу это немного сложно, но благодаря командной строке вы можете работать быстро. Чтобы просмотреть новое изображение, просто скажите «Открыть ‹newImageName» в Терминале, изображение откроется в режиме предварительного просмотра. - person David H; 23.07.2012
comment
Хм... кажется, что samplePerPixel также является свойством только для чтения. - person Martin; 23.07.2012
comment
Что ж, я пытался подчеркнуть, что НЕКОТОРЫЙ инструмент командной строки позволит вам сделать это. ImageMagik наверняка, может быть, какой-нибудь инструмент командной строки png. Вы можете получить бинарные файлы большинства этих инструментов, поэтому вам не нужно создавать их с нуля. Я думал, что вы можете использовать sips для преобразования, но только форматы. Возможно, если вы конвертируете в bmp или sgi, а затем обратно в png, он добавит альфа-канал, но эксперименты — единственный способ выяснить это. - person David H; 23.07.2012

В некоторых файлах это работает:

sips -s format png '/Volumes/HD/Optimized PNG/TXT - Глубина раздела copy.png' --out '/Volumes/HD/Optimized PNG/TXT - Глубина раздела copy-.PNG' /Volumes/HD/Optimized PNG /TXT - Копия глубины раздела.png /Volumes/HD/Оптимизированный PNG/TXT - Копия глубины раздела-.PNG mis-bhayward61p-swk:~ zav$

Но также иногда это не так:

sips -s формат png --setProperty hasAlpha 0 '/Тома/HD/Оптимизированный PNG/Копия подраздела 2/Текст глубины раздела.png' --out '/Тома/HD/Оптимизированный PNG/Копия подраздела 2/Глубина текста-. PNG'/Volumes/HD/Оптимизированный PNG/Копия подраздела 2/Глубина раздела Text.png Ошибка: невозможно выполнить --setProperty hasAlpha в файле /Volumes/HD/Оптимизированный PNG/Копия подраздела 2/Глубина раздела Text-.PNG mis-bhayward61p -swk:~ зав$

Надеюсь, это продвинет вас немного дальше.

person Alex Zavatone    schedule 05.09.2012