johan
08.06.2011 08:41 Terárium pro ještěry
Вчерась на форуме ImageMagic таки получил ответ на вопрос о записи произвольных файлов вовнутрь PNG-картинки. http://www.imagemagick.org/discourse-ser...
Но не смог понять последний ответ: как может бинарный файл "содержать символы из кодировки Latin-1", ежели она 8-битная? Это я чего-то недопонимаю, или чувак с форума не понимает меня?
Как я понял, бинарные данные можно писать в iTXt, но если еще что-то делать с файлом в IM, то данные потеряются, т.к. он не понимает iTXt. Это не касается tEXt и zTXt, но в них можно писать только в Latin-1.
Я об этом и спрашиваю. Разве Latin-1 — это не 8 бит?
я хз, но в вики написано, что в Latin-1 кодовые позиции 0—31 (0x0—0x1F) и 127—159 (0x7F—0x9F) не определены.
Короче, надо тупо пробовать. Всегда, блеять, думал, что "кодировка" — это тупо соответствие рисунка буковки конкретному байту. А тут вот оно как оказоваецо :-(
правильно думал, просто это соответствие не всегда тотальное, хотя всегда биективное.
Вообще, я не понял твой вопрос про another type of chunk (отвечающий в треде, похоже, тоже). Что ты имел ввиду?
Ну там же iTXt, zTXt и tEXt. И из спецификации я не понял, чем отличается iTXt и tEXt, кроме как указанием для читающего — по сколько байт на букву в этом тексте.
эти все чанки для хранения текста?
Как указуется кодировка в каждом из них?
(спецификацию не читал, obv)
http://www.libpng.org/pub/png/spec/1.2/P... Насколько я понимаю — не указывается. Просто _по спецификации_ текст в tEXt интерпретируется как Latin-1, а в iTXt пишется юникод и указывается язык (по желанию).
плохая, негодная спецификация. Рекоммендую бинарные данные оборачивать в base64 и совать в zTXt.
НО ЗАЧЕМ O_o
что зачем?
base64 — самый удобный и надёжный метод передачи произвольных бинарных данных там, где разрешён только текст. Единственный минус — раздувание на 25% размера данных, которое может стать проблемой с большими равками — с лёгкостью компенсируется сжатием deflate. Итог: base64 внутри zTXt.
Что значит "разрешен только текст"? Остальные байты Онищенко запретил?
в tEXt, zEXt, iXTt байты интерпретируются как текст. В кодировке Latin1/UTF-8. Если ты туда начнёшь совать произвольные байты, игнорируя кодировку — рискуешь нарваться на пачку хлопот с декодерами, которые начнут спотыкаться на твоих байтах.
Моя рекоммендация: base64 внутри zTXt.
А. Та я ж для себя только :-)