johan 08.06.2011 08:41 Terárium pro ještěry

Вчерась на форуме ImageMagic таки получил ответ на вопрос о записи произвольных файлов вовнутрь PNG-картинки. http://www.imagemagick.org/discourse-ser...
Но не смог понять последний ответ: как может бинарный файл "содержать символы из кодировки Latin-1", ежели она 8-битная? Это я чего-то недопонимаю, или чувак с форума не понимает меня?

1. pzn 08.06.2011 08:47 Miranda

Как я понял, бинарные данные можно писать в iTXt, но если еще что-то делать с файлом в IM, то данные потеряются, т.к. он не понимает iTXt. Это не касается tEXt и zTXt, но в них можно писать только в Latin-1.

2. johanpzn /1 08.06.2011 08:48 Terárium pro ještěry

Я об этом и спрашиваю. Разве Latin-1 — это не 8 бит?

3. pznjohan /2 08.06.2011 08:59 Miranda

я хз, но в вики написано, что в Latin-1 кодовые позиции 0—31 (0x0—0x1F) и 127—159 (0x7F—0x9F) не определены.

4. johanpzn /3 08.06.2011 09:04 Terárium pro ještěry

Короче, надо тупо пробовать. Всегда, блеять, думал, что "кодировка" — это тупо соответствие рисунка буковки конкретному байту. А тут вот оно как оказоваецо :-(

5. ulidtkojohan /4 08.06.2011 11:46 lunatic asylum

правильно думал, просто это соответствие не всегда тотальное, хотя всегда биективное.

Вообще, я не понял твой вопрос про another type of chunk (отвечающий в треде, похоже, тоже). Что ты имел ввиду?

6. johanulidtko /5 08.06.2011 11:51 Terárium pro ještěry

Ну там же iTXt, zTXt и tEXt. И из спецификации я не понял, чем отличается iTXt и tEXt, кроме как указанием для читающего — по сколько байт на букву в этом тексте.

7. ulidtkojohan /6 08.06.2011 12:11 lunatic asylum

эти все чанки для хранения текста?
Как указуется кодировка в каждом из них?
(спецификацию не читал, obv)

8. johanulidtko /7 08.06.2011 12:14 Terárium pro ještěry

http://www.libpng.org/pub/png/spec/1.2/P... Насколько я понимаю — не указывается. Просто _по спецификации_ текст в tEXt интерпретируется как Latin-1, а в iTXt пишется юникод и указывается язык (по желанию).

9. ulidtkojohan /8 08.06.2011 12:36 lunatic asylum

плохая, негодная спецификация. Рекоммендую бинарные данные оборачивать в base64 и совать в zTXt.

10. johanulidtko /9 08.06.2011 12:36 Terárium pro ještěry

НО ЗАЧЕМ O_o

11. ulidtkojohan /10 08.06.2011 12:40 lunatic asylum

что зачем?
base64 — самый удобный и надёжный метод передачи произвольных бинарных данных там, где разрешён только текст. Единственный минус — раздувание на 25% размера данных, которое может стать проблемой с большими равками — с лёгкостью компенсируется сжатием deflate. Итог: base64 внутри zTXt.

12. johanulidtko /11 08.06.2011 12:41 Terárium pro ještěry

Что значит "разрешен только текст"? Остальные байты Онищенко запретил?

13. ulidtkojohan /12 08.06.2011 12:50 lunatic asylum

в tEXt, zEXt, iXTt байты интерпретируются как текст. В кодировке Latin1/UTF-8. Если ты туда начнёшь совать произвольные байты, игнорируя кодировку — рискуешь нарваться на пачку хлопот с декодерами, которые начнут спотыкаться на твоих байтах.
Моя рекоммендация: base64 внутри zTXt.

14. johanulidtko /13 08.06.2011 12:56 Terárium pro ještěry

А. Та я ж для себя только :-)

Do you really want to delete ?