|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Ivan Frolcov 2:5020/400 10 Jan 2003 07:22:09 To : Ivan Frolcov Subject : Re: JPEG comment -------------------------------------------------------------------------------- On Thu, 9 Jan 2003 14:58:30 +0000 (UTC), Ivan Frolcov <lala@mail.ge> wrote: >общем-то, модуль, для такой пустячной задачи. Hикто в природе не видел >какого-нибудь поделия для вписывания своих комментариев? Hа CPAN нашел >то, что надо, но в обратную сторону - читать... Естественно, никто ничего не видел. Hу да, не в сказку попал - или я один такой дурак? Hадо бы к врачу сходить, что ли... Если же какому-нибудь придурку типа меня вдруг потребуется - пожалуйста (вроде все верно, ACDSee, Photoshop & IE претензий не имеют): use strict; sub jpgcomment($$){ my ($image, $comment)=@_; $comment.="\0"; my $i=2; # пропустить лидирующие FF SOI my(@datas); while(1){ my $data; my $pre=unpack('n',substr($image,$i,2)); if ( $pre == 0xFFDA ){ #собственно картинка push @datas, substr($image,$i,length($image)-$i); last; } next if ( $pre == 0xFFD8 ); # конец данных, в принципе не должно # быть next if ( $pre == 0xFFFE ); # изначальный комментарий. нафиг my $cnt=unpack('n',substr($image,$i+2,2)); push @datas, substr($image,$i,$cnt+2); $i+=$cnt+2; last if $i >= length($image); } @datas= ($datas[0], (pack('n n', 0xFFFE, length($comment)+2).$comment), @datas[1..$#datas]); return pack('n',0xFFD8) . join('', @datas) ; } open FILE, "qq.jpg"; binmode FILE; my $buf; read FILE, $buf, -s FILE; open OFILE, ">ofile.jpg"; binmode OFILE; print OFILE jpgcomment($buf, 'He did not wear his scarlet coat'); --- ifmail v.2.15dev5 * Origin: Golden Telecom (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/2080367fade1.html, оценка из 5, голосов 10
|