Можно ли отключить модификации PNG Xcode при создании каталога активов .car? - PullRequest
1 голос
/ 29 мая 2019

Итак, я столкнулся со странной проблемой, связанной с тем, как Xcode создает Assets.car в приложении для iOS.Кажется, что процесс сборки добавляет заголовки к каждому PNG, чтобы указать цветовое пространство.У меня есть пример PNG, хранящийся в градациях серого, который составляет 4 байта данных (PNG составляет 68 байтов), но сгенерированный PNG в Assets.car составляет 3395 байтов.Что именно здесь происходит?Ну, pngcheck рассказывает историю:

pngcheck -v test_Normal.png
File: test_Normal.png (3395 bytes)
  chunk IHDR at offset 0x0000c, length 13
    4 x 1 image, 8-bit grayscale, non-interlaced
  chunk iCCP at offset 0x00025, length 3315
    profile name = kCGColorSpaceGenericGrayGamma2_2
    compression method = 0 (deflate), compressed profile = 3281 bytes
  chunk IDAT at offset 0x00d24, length 11
    zlib: deflated, 256-byte window, superfast compression
  chunk IEND at offset 0x00d3b, length 0

Сравните это с исходным PNG:

pngcheck -v test.png 
File: test.png (68 bytes)
  chunk IHDR at offset 0x0000c, length 13
    4 x 1 image, 8-bit grayscale, non-interlaced
  chunk IDAT at offset 0x00025, length 11
    zlib: deflated, 256-byte window, fast compression
  chunk IEND at offset 0x0003c, length 0

Этот фрагмент PNG iCCP, похоже, соответствует следующему файлу после сжатия zlib.

'/System/Library/ColorSync/Profiles/Generic Gray Gamma 2.2 Profile.icc'

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

Я провел дополнительное тестирование 24-битных данных пикселей BPP sRGB, и, хотя в это трудно поверить, процесс кодирования PNG в каталоге активов Apple фактическитихо изменяя входные данные PNG, чтобы они больше не были без потерь.Вот пример изображения 4x4 PNG, которое соответствует следующим шестнадцатеричным данным:

0x020100 0x050403 0x080706 0x0B0A09 
0x0E0D0C 0x00000F 0x000000 0x000000 
0x000000 0x000000 0x000000 0x000000 
0x000000 0x000000 0x000000 0x000000 

С этими данными изображения все в порядке, пока вы не поместите их в каталог ресурсов, процесс сборки xcodeизменяет данные пикселя PNG следующим образом:

0x020100 0x050403 0x080706 0x0B0A09
0x0E0D0C 0x00010E 0x000000 0x000000
0x000000 0x000000 0x000000 0x000000
0x000000 0x000000 0x000000 0x000000

Обратите внимание, как пиксель в (1,1) был изменен с 0x00000F -> 0x00010E в процессе создания каталога активов.

...