flame в png, и обратно - несделанное
- Стандарт https://www.w3.org/TR/PNG/#11textinfo
- Источник сведений: https://metacpan.org/pod/Image::PNG::Libpng#Text-chunks
- не лучше ли покопать в сторону exiv2, exiftool… они ж, вроде, умеют png-шную метадату тоже?
Чего хочется
- вкладывать flame, по которому генерится файл, в картинку, которая из него сгенерена, чтоб не терялись. Можно ориентироваться по одноименности.
- в вкладывание явно нужен адрес папки или файлов, и хз, что указывать, картинки или наоборот, флеймы. В принципе, с учетом возможностей jwildfire, по флейму можно даже картинку генерить, потом в нее вкладывать. Но у меня чаще уже готовые есть.
- вынимать флейм из картинки, когда хочется что-то с ним сделать.
- в вынимание нужен адрес картинки, откуда брать, и адрес-имя, куда сохранять.
Начало файла
#!/bin/perl use warnings; use strict; use utf8; use Image::PNG::Const ':all'; use Image::PNG::Libpng ':all';
Без констант не распознаёт ключевые слова.
Всякие заготовки
Png
Считать файл.
my $png = read_png_file ('q.png');
Записать файл.
$png->write_png_file ('nice.png');
читать текстовые чанки
my $text_chunks = $png->get_text ();
Писать чанки
$png->set_text ([\%chunk1, \%chunk2]);
if (libpng_supports ('UNKNOWN_CHUNKS')) { print "libpng supports unknown chunks \n"; }
Пример
use utf8; use Image::PNG::Const ':all'; use Image::PNG::Libpng ':all'; my $png = create_write_struct (); $png->set_IHDR ({width => 1, height => 1, bit_depth => 8, color_type => PNG_COLOR_TYPE_GRAY}); $png->set_rows (['X']); $png->set_text ([{ compression => PNG_TEXT_COMPRESSION_NONE, key => "Copyright", text => "Copyright (C) 2020 Fat Cat", }, { compression => PNG_ITXT_COMPRESSION_zTXt, key => "Copyright", lang_key => '著者権', lang => 'ja_JP', text => '©令和2年茉莉ニャンバーガーさん', }]); $png->write_png_file ('copyright.png');
Варианты сжатия
The value of compression controls the compression of the text. If compression is not supplied, a default value of PNG_TEXT_COMPRESSION_NONE is applied. The compression field can take the following values, available from Image::PNG::Const:
PNG_TEXT_COMPRESSION_NONE
TEXT = Printable ASCII and space characters. PNG_TEXT_COMPRESSION_zTXt
TEXT = Printable ASCII and space characters. PNG_ITXT_COMPRESSION_NONE
ITXT = International text, should be UTF-8. PNG_ITXT_COMPRESSION_zTXt
ITXT = International text, should be UTF-8.
lang
This should be set to name of the language of the text, if the text chunk is iTXt. According to the PNG specification, "It is an ISO 646.IRV:1991 [ISO 646] string consisting of hyphen-separated words of 1-8 alphanumeric characters each (for example cn, en-uk, no-bok, x-klingon, x-KlInGoN)."
- lang_key
- This corresponds to the "Translated keyword" of the PNG specification. Note that the user needs to supply key and "lang" as well as lang_key.
- text
- The value of "text" is added to the PNG as the text segment. This can be omitted if you just want to write a key value without any accompanying text.
Разное
@sub_array = grep(/$pattern/, @file); # поискать шаблон по массиву
$s = join('', @array); # слить строки в переменную