Blog

PNG��GIF��JPEG�˥����Ȥ�������

By Hiroyuki OYAMA Thu Apr 8 18:56:17 2004

mod_ezweb_download�⥸�塼�������ǡ�����ü���ऱ������ݸǽ(?)�ˤĤ���ͷ��Ǥޤ������Ȥ����櫓��PNG,GIF,JPEG�˥����Ȥ���������ˤĤ��Ƥδ�ñ�ʥ��ȥƥ��ȼ�����

�����ξ����ͷ�Ӥ�Ĵ�٤Ƽ�������ʪ�ʤΤǡ����������Τ���񤤤Ƥ����ǽ��������ޤ����ޤ�������pixel�������λ��Ȥ����Ȥ��ä�����ϴޤޤ�ޤ���Τ����ա�
����ˤ��Ƥ�KDDI��"kddi_copyright=on"��ž��(?)���������롢�Ȥ����ޤ��
����Τ��륳��ƥ�Ĥϰ���ž���Ե���
by KDDI
�ȸ�äƤ���褦�ʥ͡��ߥ󥰥��󥹤��������ʡ���������٤Ĥ˻��KDDI�������Ȥ����������櫓����ʤ��Ǥ��衣�Ϥ���

PNG

PNG�Υե�����ϡ�1�Ĥ������ͥ����ȡ�ʣ������������¤ֹ�¤�Ǥ���
SIGNATURE(8 byte);
CHUNK(12 + data byte) x n;

PNG�Υ����ͥ���

�����ͥ���ϡ֤��Υե������PNG�Ǥ���פ�ɽ��������ͤǡ��ե��������Ƭ�˼��Τ褦���ͤ������ޤ�ޤ���
0x89 0x50 0 0x4e 0x47 0x0d 0xa 0x1a 0x0a

PNG�����

����󥯤�PNG�ե�������ݻ��������μ���˱�����IHDR����󥯡�IDAT����󥯤Ȥ��ä�ʣ���μ��ब¸�ߤ��ޤ�������󥯤ι�¤�ϥǡ����μ���˴ط��ʤ����ΤȤ���Ǥ���
length(4 byte);
type(4 byte);
data(0��n byte);
crc(4 byte);
length�ϡ�����󥯤�data����Ĺ���򼨤�4�Х��Ȥ��ͤǡ��ӥå�����ǥ�����dz�Ǽ���ޤ���
type�ϥ���󥯤μ���򼨤�4�Х��Ȥ��ͤǤ���type���ͤ�ʸ�����ɽ���Ǥ��ޤ�������󥯤μ���ˤĤ��Ƥ�PNG�Υɥ������ - Chunk types�򻲾Ȥ��ޤ���
data�ϥ���󥯤˴ޤ�ǡ������Τ�ΤǤ���Ĺ����0�ξ��⤢��ޤ���
crc��type��data�����ͤ򸡺����뤿����ͤǤ���CRC���르�ꥺ��ˤĤ��Ƥβ���ȥ���ץ륳���ɤ�PNG�Υɥ������ - Cyclic Redundancy Code algorithm�򻲾Ȥ��ޤ���
������PNG�ե�����ˤϾ��ʤ��Ȥ�
  1. SIGNATURE
  2. IHDR�����
  3. IDAT�����
  4. IEND�����
���ޤޤ�ޤ���

IHDR����󥯤ϲ����Υ������䰵����ˡ�ʤɤȤ��ä�������ɽ�������˴ؤ��������ݻ��������٤ƤΥ���󥯤���Ƭ�˰��֤���ɬ�פ�����ޤ���IHDR����󥯤�type��
0x73(I) 0x72(H) 0x68(D) 0x82(R)
�ǡ�data���ϼ��Τ褦�ʥǡ�����¤�Ǥ���
width(4 byte);
height(4 byte);
bit depth(1 byte);
color type(1 byte);
compression method(1 byte);
filter method(1 byte);
interface method(1 byte);


IDAT����󥯤ϲ����Υǡ������ݻ����ޤ���IDAT����󥯤�type��
0x73(I) 0x68(D) 0x65(A) 0x84(T)
�Ǥ���



IEND����󥯤�PNG�Υǡ������ȥ꡼��ν�ü�򼨤��ޤ���IEND����󥯤�type��
0x73(I) 0x69(E) 0x78(N) 0x68(D)
�Ǥ���

IHDR����󥯤���Ƭ��IEND����󥯤������˰��֤���ɬ�פ�����ޤ���������ʳ��Υ���󥯤��¤ӽ������Ϥ���ޤ���

PNG������

PNG�˥ƥ����Ⱦ�������������tEXt����󥯤ʤɤ����Ѥ��ޤ���tEXt����󥯤�type��
0x74(t) 0x45(E) 0x58(X) 0x74(t)
�Ǥ���data����
keyword(1��79 byte);
separator(1 byte);
text(n byte);
�η����dz�Ǽ����ޤ���keyword�ϥƥ����Ⱦ���μ��̤򤷤᤹ʸ����Ǥ���separator��keyword��³��text��ʬ�䤹��ʸ����'\0'����Ѥ��ޤ���text�ϥƥ����Ⱦ�������ΤǤ���

PNG������ݸ�����������

�������äʤɤ˥���������ɤ���������ž���ʤɤ����¤�����ϡ��ʲ��Τ褦�ʥǡ�����tEXt����󥯤��ɲä��ޤ���
keyword = "Copyright";
text    = "kddi_copyright=on";  // EZweb��
// text = "copy=\"NO\"";        // iMODE��
tEXt����󥯤�IHDR����󥯤�ľ��ʤ�Ǥ�դξ��������ߤޤ���IHDR����󥯤�ľ��Ȥϥե�������Ƭ����33�Х�����(SIGNATURE(8) + IHDR(25))�Ǥ���

GIF

GIF�ե�����ϥ����ͥ����ޤ�1�Ĥ��إå��ȡ�ʣ�����֥��å����¤ӡ��Ǹ��Trailer(0x3b)��ޤ๽¤�Ǥ���
HEADER(13��781 byte);
BLOCK x n;
Trailer(1 byte);

GIF�Υإå�

�إå��ˤϡ֤��Υե������GIF�Ǥ���פ�ɽ�������ͥ���ȡ��С������ȡ������Υ������䥫�顼�ơ��֥�ʤɤ�ɽ��������ޤ�Ǥ��ޤ���
signature(3 byte);
version(3 byte);
width(2 byte);
height(2 byte);
color table(1 byte);
background color index(1 byte);
pixel aspect ratio(1 byte);
global color table(0��768 byte);
���Τ���color table�γƥӥåȤ�
global color table flag(0x80);
color resolution(0x70);
sort flag(0x08);
size of global color table(0x07);
�򼨤��Ƥ��ޤ����⤷global color table flag��Ω�äƤ�����ϡ��إå���������global color table����Ϳ����ޤ������Υ�������size of global color table���ͤ��Ȥ˼��Τ褦�˷׻����ޤ���
3 * (2 ^ (size_of_global_color_table + 1));
// C �ξ��� 3 * (1 << (size_of_global_color_table + 1)) �Ȥ�?
// Perl��     3 * (2**(size_of_global_color_table + 1)) �Ȥ�?

GIF�Υ֥��å�

�֥��å�����Ƭ1�ǥ֥��å��μ����Ƚ�ꤷ�ޤ��������ǡ������ݻ�����Image�֥��å��ξ���
0x2c
����¾�γ�ĥ�֥��å��ξ���
0x21
�Ǥ�����ĥ�֥��å��ξ��ϼ���1�Х��Ȥ��ͤˤ�äƼ����Ƚ�ꤷ�ޤ���Ʃ������䥢�˥᡼��������delay�ʤɤ��������Graphic Control Extension�֥��å��ξ���
0x21 0xf9
�����Ȥ��ݻ�����Comment Extension�֥��å��ξ���
0x21 0xfe
�Ǥ���

�֥��å��μ���ˤ�äƥǡ�����¤���ۤʤ�ޤ���

GIF������

�����Ȥ��ݻ�����Comment Extension�֥��å���
block size(1 byte)
text(n byte) x n
block terminator(1 byte)
�Ȥ�����¤�Ǥ���
block size��text���Υ�������1�Х��ȤǼ����ޤ���
text�ϥ����ȤȤ���������ʸ������ݻ����ޤ���
block terminator�ϥ֥��å��ν�ü�򼨤�1�Х��Ȥ���(0x00)�Ǥ���

GIF������ݸ�����������

(��:̤����)

�������äʤɤ˥���������ɤ���������ž���ʤɤ����¤�����ϡ��ʲ��Τ褦�ʥǡ�����Comment Extension�֥��å����ɲä��ޤ���
text    = "kddi_copyright=on";  // EZweb��
// text = "copy=\"NO\"";        // iMODE��
Comment Extension�֥��å��ϥإå���³��Ǥ�դξ��������ߤޤ���GIF�Υإå��ϲ���Ĺ�ʤΤǡ�
  1. �إå���13byte�ɤ߹���
  2. Global Color Table�Υ�������׻�����
  3. Global Color Table�Υ������������ե��åȤ������֤�Comment Extension�֥��å���������
�Ȥ��ä���³����ɬ�פˤʤ�ޤ���

JPEG

JPEG�Υե������ʣ���������������鹽������ޤ���
SOI SEGMENT(2 byte)
SEGMENT x n
EOI SEGMENT(2 byte)
��Ƭ�˸���륻�����Ȥ�SOI�������Ȥǡ�����2�Х��Ȥ��ͤǹ�������ޤ���
0xff 0xd8
�����˸���륻�����Ȥ�EOI�������Ȥǡ�����2�Х��Ȥ��ͤǹ�������ޤ���
0xff 0xd9
�ޤ���SOI�������Ȥ�ľ��ˤϲ����ξ�����ݻ�����APP0��APP1�ʤɤ�APPn�������Ȥ����֤���ޤ���

JPEG��������

SOI��EOI������������Ȥ����ˤ�äƹ�¤���ۤʤ�ޤ������ۤȤ�ɤ�
marker(2 byte)
length(2 byte)
data(n byte)
�Ȥ��ä���¤�Ǥ���
marker�ϥ������Ȥμ���򼨤�2�Х��Ȥ��ͤǤ���SOI(0xff 0xd8), EOI(0xff 0xd9)��¾�ˤ�APP0(0xff 0xe0), SOF0(0xff 0xc0)�ʤɥ������Ȥμ���˱������ͤ��������Ƥ��ޤ���
length�ϥ������Ȥ��ݻ�����data�Υ������򼨤�2�Х��Ȥ��ͤǡ��ӥå�����ǥ�����dz�Ǽ���ޤ���length�Ǽ������Ĺ����data�Υ����� + 2�Ǥ����������դ�ɬ�פǤ���

JPEG������

JPEG�˥����Ȥ�������ˤ�COM��������(0xff 0xfe)����Ѥ��ޤ���COM�������Ȥ�
marker(2 byte)
length(2 byte)
text(n byte)
�Ȥ�����¤�Ǥ���

JPEG������ݸ�����������

(��:̤���ڡ�COM�������ȤǤϤʤ�APP1(Exif)��Copyright(0x82 0x98)������������٤�?)

�������äʤɤ˥���������ɤ���������ž���ʤɤ����¤�����ϡ��ʲ��Τ褦�ʥǡ�����COM�������Ȥ��ɲä��ޤ���
text    = "kddi_copyright=on";  // EZweb��
// text = "copy=\"NO\"";        // iMODE��
COM�������Ȥ�SOI�������Ȥ�³����APP0��APP1�Ȥ��ä�"APPn"�������Ȥθ����Ǥ�դξ��������ߤޤ���APPn�������Ȥ�marker��
0xff 0xe0; // APP0 JFIF application segment 
0xff 0xe1; // APP1 Exif
...
0xff 0xef; // APP15
�ʤɡ��ե���������˱������ޡ������Ѱդ���Ƥ��ޤ���

������
  1. SOI�������Ȥ�³��APPn�������Ȥ�marker��length����6�Х����ɤ߹���
  2. APPn�������ȤΥ������������ե��åȤ������֤�COM�������Ȥ�������
�Ȥ��ä���³����ɬ�פǤ���

����

�Ȥ����櫓�Ǥ����Υͥ����Ȥ�PNG, GIF, JPEG�γƥե�����˥����Ȥ�������ġ����񤤤Ƥߤޤ�����
imgcmt version 1.0.0������������
�ƥե���������Ѥ�
  • imgcmtpng - PNG��
  • imgcmtgif - GIF��
  • imgcmtjpg - JPEG��
��3�ĤΥץ�������ޤߤޤ������줾��ɸ�����ϤǤ����Ȥä������Υ��ȥ꡼��˥����Ȥ������ߡ�ɸ����Ϥ��Ǥ��Ф��ޤ���
$ imgcmtpng Copyright kddi_copyright=on < src.png > dist.png
$ imgcmtgif kddi_copyright=on < src.gif > dist.gif
$ imgcmtjpg kddi_copyright=on < src.jpg > dist.jpg
�Ȥ��ä��Ȥ��������顼���ˤϥ��ȥ꡼����ڤ�����Ǥ��������ξ��϶��ϥ��롼����Ĥ���������褤���⤷��ޤ���͡�
imgcmt��libpng��libjpeg�ʤɤΥե������μ����ǤϤʤ����������ɲäΤߤΥ���ץ�Ǿ����ʼ����Ǥ���
$ wc -l *.c
     114 imgcmtgif.c
     117 imgcmtjpg.c
     166 imgcmtpng.c
     397 total
mgcmtpng.c����CRC�Υơ��֥������Ȥ��Ƥ⤿�����ΤǤ���äȤ����礭���Ǥ��͡�

�����ƻ䤬���äƤ���TU-KA��EZwebü��TK22�ǡ�PNG�˴ؤ��ƴ��Ԥɤ����ư����ǧ�Ǥ��ޤ�������JPEG�˴ؤ��ƤϤɤ��������򤬴ְ�äƤ���Τ��褯Ƚ��ޤ��󤬴����̤��ư���Ԥ��ޤ��󡣤ޤ�TK22���ɻ�Ǥ�GIF�򥵥ݡ��Ȥ��Ƥ��ʤ��餷���ΤǴ�����̤���ڤǤ���
�ܤ������Υ����ȴ�˾�ä�������KDDI��Web�����Ȥ˾夬�äƤ���ʾ�ξ���Υݥ��󥿤��������������Ȥ����äƤ�ñ�˸Ŀ�Ū��̣��Ĵ�٤Ƥ������ʤΤǡ��ܿ������ˤϿ������ʤ����Ȥ��ξ夢��ޤ��̤�(��)

Comments

Post a comment

Name:


URL:


Comments:


Web���󥸥˥��Τ����Apache�⥸�塼��ץ�����ߥ󥰥�����

Apache��Hack����!
�⥸�塼��ץ�����ߥ󥰶������θ�!!
���: 2,919��(�ǹ�)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Blog > PNG��GIF��JPEG�˥����Ȥ�������