xref: /dflybsd-src/contrib/file/magic/Magdir/jpeg (revision 739f0ef867128a933e021db3d831e906fcafd825)
1327e51cbSPeter Avalos
2327e51cbSPeter Avalos#------------------------------------------------------------------------------
3*3b9cdfa3SAntonio Huete Jimenez# $File: jpeg,v 1.37 2022/06/17 18:03:35 christos Exp $
4327e51cbSPeter Avalos# JPEG images
5327e51cbSPeter Avalos# SunOS 5.5.1 had
6327e51cbSPeter Avalos#
7327e51cbSPeter Avalos#	0	string		\377\330\377\340	JPEG file
8327e51cbSPeter Avalos#	0	string		\377\330\377\356	JPG file
9327e51cbSPeter Avalos#
10327e51cbSPeter Avalos# both of which turn into "JPEG image data" here.
11327e51cbSPeter Avalos#
12614728caSSascha Wildner0	belong			0xffd8fff7	JPEG-LS image data
13614728caSSascha Wildner!:mime	image/jls
14614728caSSascha Wildner!:ext jls
15614728caSSascha Wildner>0	use			jpeg
16614728caSSascha Wildner
17614728caSSascha Wildner0	belong&0xffffff00	0xffd8ff00	JPEG image data
1879343712SPeter Avalos!:mime	image/jpeg
1979343712SPeter Avalos!:apple	8BIMJPEG
20c30bd091SSascha Wildner!:strength *3
21c30bd091SSascha Wildner!:ext jpeg/jpg/jpe/jfif
22614728caSSascha Wildner>0	use			jpeg
23614728caSSascha Wildner
24614728caSSascha Wildner0	name		jpeg
25327e51cbSPeter Avalos>6	string		JFIF		\b, JFIF standard
26327e51cbSPeter Avalos# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
27327e51cbSPeter Avalos# in a vain attempt to add image size reporting for JFIF.  Note that these
28327e51cbSPeter Avalos# tests are not fool-proof since some perfectly valid JPEGs are currently
29327e51cbSPeter Avalos# impossible to specify in magic(4) format.
30327e51cbSPeter Avalos# First, a little JFIF version info:
31327e51cbSPeter Avalos>>11	byte		x		\b %d.
32327e51cbSPeter Avalos>>12	byte		x		\b%02d
33327e51cbSPeter Avalos# Next, the resolution or aspect ratio of the image:
3482c5fa3eSPeter Avalos>>13	byte		0		\b, aspect ratio
3582c5fa3eSPeter Avalos>>13	byte		1		\b, resolution (DPI)
3682c5fa3eSPeter Avalos>>13	byte		2		\b, resolution (DPCM)
3782c5fa3eSPeter Avalos>>14	beshort		x		\b, density %dx
3882c5fa3eSPeter Avalos>>16	beshort		x		\b%d
3982c5fa3eSPeter Avalos>>4	beshort		x		\b, segment length %d
40327e51cbSPeter Avalos# Next, show thumbnail info, if it exists:
41327e51cbSPeter Avalos>>18	byte		!0		\b, thumbnail %dx
42327e51cbSPeter Avalos>>>19	byte		x		\b%d
4382c5fa3eSPeter Avalos>6	string		Exif		\b, Exif standard: [
4482c5fa3eSPeter Avalos>>12	indirect/r	x
4582c5fa3eSPeter Avalos>>12	string		x		\b]
46327e51cbSPeter Avalos
4782c5fa3eSPeter Avalos# Jump to the first segment
4882c5fa3eSPeter Avalos>(4.S+4)	use		jpeg_segment
4982c5fa3eSPeter Avalos
5082c5fa3eSPeter Avalos# This uses recursion...
5182c5fa3eSPeter Avalos0		name		jpeg_segment
5282c5fa3eSPeter Avalos>0	beshort		0xFFFE
53c30bd091SSascha Wildner# Recursion handled by FFE0
54c30bd091SSascha Wildner#>>(2.S+2)	use			jpeg_segment
5582c5fa3eSPeter Avalos>>2	pstring/HJ	x		\b, comment: "%s"
5682c5fa3eSPeter Avalos
5782c5fa3eSPeter Avalos>0	beshort		0xFFC0
5882c5fa3eSPeter Avalos>>(2.S+2)	use			jpeg_segment
5982c5fa3eSPeter Avalos>>4	byte		x		\b, baseline, precision %d
6082c5fa3eSPeter Avalos>>7	beshort		x		\b, %dx
6182c5fa3eSPeter Avalos>>5	beshort		x		\b%d
626fca56fbSSascha Wildner>>9	byte		x		\b, components %d
6382c5fa3eSPeter Avalos
6482c5fa3eSPeter Avalos>0	beshort		0xFFC1
6582c5fa3eSPeter Avalos>>(2.S+2)	use			jpeg_segment
6682c5fa3eSPeter Avalos>>4	byte		x		\b, extended sequential, precision %d
6782c5fa3eSPeter Avalos>>7	beshort		x		\b, %dx
6882c5fa3eSPeter Avalos>>5	beshort		x		\b%d
696fca56fbSSascha Wildner>>9	byte		x		\b, components %d
7082c5fa3eSPeter Avalos
7182c5fa3eSPeter Avalos>0	beshort		0xFFC2
7282c5fa3eSPeter Avalos>>(2.S+2)	use			jpeg_segment
7382c5fa3eSPeter Avalos>>4	byte		x		\b, progressive, precision %d
7482c5fa3eSPeter Avalos>>7	beshort		x		\b, %dx
7582c5fa3eSPeter Avalos>>5	beshort		x		\b%d
766fca56fbSSascha Wildner>>9	byte		x		\b, components %d
7782c5fa3eSPeter Avalos
7882c5fa3eSPeter Avalos# Define Huffman Tables
7982c5fa3eSPeter Avalos>0	beshort		0xFFC4
8082c5fa3eSPeter Avalos>>(2.S+2)	use			jpeg_segment
8182c5fa3eSPeter Avalos
8282c5fa3eSPeter Avalos>0	beshort		0xFFE1
83c30bd091SSascha Wildner# Recursion handled by FFE0
8482c5fa3eSPeter Avalos#>>(2.S+2)	use			jpeg_segment
8582c5fa3eSPeter Avalos>>4	string		Exif		\b, Exif Standard: [
8682c5fa3eSPeter Avalos>>>10	indirect/r	x
8782c5fa3eSPeter Avalos>>>10	string		x		\b]
8882c5fa3eSPeter Avalos
8982c5fa3eSPeter Avalos# Application specific markers
9082c5fa3eSPeter Avalos>0	beshort&0xFFE0	=0xFFE0
9182c5fa3eSPeter Avalos>>(2.S+2)	use			jpeg_segment
9282c5fa3eSPeter Avalos
9382c5fa3eSPeter Avalos# DB: Define Quantization tables
9482c5fa3eSPeter Avalos# DD: Define Restart interval [XXX: wrong here, it is 4 bytes]
9582c5fa3eSPeter Avalos# D8: Start of image
9682c5fa3eSPeter Avalos# D9: End of image
9782c5fa3eSPeter Avalos# Dn: Restart
9882c5fa3eSPeter Avalos>0	beshort&0xFFD0	=0xFFD0
99c30bd091SSascha Wildner>>0	beshort&0xFFE0	!0xFFE0
100c30bd091SSascha Wildner>>>(2.S+2)	use			jpeg_segment
10182c5fa3eSPeter Avalos
102614728caSSascha Wildner#>0	beshort		x		unknown %#x
10382c5fa3eSPeter Avalos#>>(2.S+2)	use			jpeg_segment
104327e51cbSPeter Avalos
105327e51cbSPeter Avalos# HSI is Handmade Software's proprietary JPEG encoding scheme
106*3b9cdfa3SAntonio Huete Jimenez# Update:	Joerg Jenderek
107*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/HSI_JPEG
108*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-hsi1.trid.xml
109*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "HSI JPEG bitmap"
110327e51cbSPeter Avalos0	string		hsi1		JPEG image data, HSI proprietary
111*3b9cdfa3SAntonio Huete Jimenez#!:mime	application/octet-stream
112*3b9cdfa3SAntonio Huete Jimenez!:mime	image/x-hsi
113*3b9cdfa3SAntonio Huete Jimenez!:ext	hsi/jpg
114327e51cbSPeter Avalos
115327e51cbSPeter Avalos# From: David Santinoli <david@santinoli.com>
116e8af9738SPeter Avalos0	string		\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A	JPEG 2000
117*3b9cdfa3SAntonio Huete Jimenez# delete from ./animation (version 1.87) with jP (=6A50h) magic at offset 4
118e8af9738SPeter Avalos# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
119e8af9738SPeter Avalos# Added sub-entries for JP2, JPX, JPM and MJ2 formats; added mimetypes
120e8af9738SPeter Avalos# https://github.com/bitsgalore/jp2kMagic
121e8af9738SPeter Avalos#
122e8af9738SPeter Avalos# Now read value of 'Brand' field, which yields a few possibilities:
123*3b9cdfa3SAntonio Huete Jimenez# Update:	Joerg Jenderek
124*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JP2
125*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpeg2k.trid.xml
126*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG 2000 bitmap"
127e8af9738SPeter Avalos>20	string		\x6a\x70\x32\x20	Part 1 (JP2)
128*3b9cdfa3SAntonio Huete Jimenez# aliases	image/jpeg2000, image/jpeg2000-image, image/x-jpeg2000-image
129e8af9738SPeter Avalos!:mime	image/jp2
130*3b9cdfa3SAntonio Huete Jimenez!:ext	jp2
131*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPX
132*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpx.trid.xml
133*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG 2000 eXtended bitmap"
134e8af9738SPeter Avalos>20	string		\x6a\x70\x78\x20	Part 2 (JPX)
135e8af9738SPeter Avalos!:mime	image/jpx
136*3b9cdfa3SAntonio Huete Jimenez!:ext	jpf/jpx
137*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPM
138*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpm.trid.xml
139*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG 2000 eXtended bitmap"
140e8af9738SPeter Avalos>20	string		\x6a\x70\x6d\x20	Part 6 (JPM)
141e8af9738SPeter Avalos!:mime	image/jpm
142*3b9cdfa3SAntonio Huete Jimenez!:ext	jpm
143*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/MJ2
144*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/v/video-mj2.trid.xml
145*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "Motion JPEG 2000 video"
146e8af9738SPeter Avalos>20	string		\x6d\x6a\x70\x32	Part 3 (MJ2)
147e8af9738SPeter Avalos!:mime	video/mj2
148*3b9cdfa3SAntonio Huete Jimenez!:ext	mj2/mjp2
14979343712SPeter Avalos
15079343712SPeter Avalos# Type: JPEG 2000 codesream
15179343712SPeter Avalos# From: Mathieu Malaterre <mathieu.malaterre@gmail.com>
152*3b9cdfa3SAntonio Huete Jimenez# Update:	Joerg Jenderek
153*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPEG_2000_codestream
154*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpc.trid.xml
155*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG-2000 Code Stream bitmap"
15679343712SPeter Avalos0	belong		0xff4fff51						JPEG 2000 codestream
157*3b9cdfa3SAntonio Huete Jimenez# value like: 0701h FF50h
158*3b9cdfa3SAntonio Huete Jimenez#>45	ubeshort	x	\b, at 45 %#4.4x
159*3b9cdfa3SAntonio Huete Jimenez#!:mime	application/octet-stream
160*3b9cdfa3SAntonio Huete Jimenez# https://reposcope.com/mimetype/image/x-jp2-codestream
161*3b9cdfa3SAntonio Huete Jimenez!:mime	image/x-jp2-codestream
162*3b9cdfa3SAntonio Huete Jimenez!:ext	jpc/j2c/j2k
163*3b9cdfa3SAntonio Huete Jimenez# MAYBE also JHC like in byte_causal.jhc ?
164*3b9cdfa3SAntonio Huete Jimenez# WHAT IS THAT? DEAD ENTRY?
165*3b9cdfa3SAntonio Huete Jimenez#45	beshort		0xff52
166c30bd091SSascha Wildner
167c30bd091SSascha Wildner# JPEG extended range
168*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XR
169*3b9cdfa3SAntonio Huete Jimenez# Reference:	https://www.itu.int/rec/T-REC-T.832
170*3b9cdfa3SAntonio Huete Jimenez#		http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-wmp.trid.xml
171*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG XR bitmap"
172c30bd091SSascha Wildner0	string		\x49\x49\xbc
173*3b9cdfa3SAntonio Huete Jimenez# FILE_VERSION_ID; shall be equal to 1; other values are reserved for future use
174c30bd091SSascha Wildner>3	byte		1
175*3b9cdfa3SAntonio Huete Jimenez# FIRST_IFD_OFFSET; shall be an integer multiple of 2; so skip DROID fmt-590-signature-id-931.wdp
176c30bd091SSascha Wildner>>4	lelong%2	0	JPEG-XR
177*3b9cdfa3SAntonio Huete Jimenez#!:mime	image/vnd.ms-photo
178c30bd091SSascha Wildner!:mime	image/jxr
179*3b9cdfa3SAntonio Huete Jimenez# NO example for HDP !
180*3b9cdfa3SAntonio Huete Jimenez!:ext	jxr/wdp/hdp
181*3b9cdfa3SAntonio Huete Jimenez# MAYBE also WMP ?
182*3b9cdfa3SAntonio Huete Jimenez#!:ext	jxr/wdp/hdp/wmp
183*3b9cdfa3SAntonio Huete Jimenez# moved from ./images (version 1.205 ), merged and
184*3b9cdfa3SAntonio Huete Jimenez# partly verified by XnView `nconvert -info abydos.jxr FLOWER.wdp`
185*3b9cdfa3SAntonio Huete Jimenez# example: https://web.archive.org/web/20160403012904/
186*3b9cdfa3SAntonio Huete Jimenez# http://shikino.co.jp/solution/upfile/FLOWER.wdp.zip
187*3b9cdfa3SAntonio Huete Jimenez>90	bequad		0x574D50484F544F00
188*3b9cdfa3SAntonio Huete Jimenez>>98	byte&0x08	=0x08			\b, hard tiling
189*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x80	=0x80			\b, tiling present
190*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x40	=0x40			\b, codestream present
191*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	x			\b, spatial xform=
192*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x00			\bTL
193*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x08			\bBL
194*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x10			\bTR
195*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x18			\bBR
196*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x20			\bBT
197*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x28			\bRB
198*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x30			\bLT
199*3b9cdfa3SAntonio Huete Jimenez>>99	byte&0x38	0x38			\bLB
200*3b9cdfa3SAntonio Huete Jimenez>>100	byte&0x80	=0x80			\b, short header
201*3b9cdfa3SAntonio Huete Jimenez>>>102	beshort+1	x			\b, %d
202*3b9cdfa3SAntonio Huete Jimenez>>>104	beshort+1	x			\bx%d
203*3b9cdfa3SAntonio Huete Jimenez>>100	byte&0x80	=0x00			\b, long header
204*3b9cdfa3SAntonio Huete Jimenez>>>102	belong+1	x			\b, %x
205*3b9cdfa3SAntonio Huete Jimenez>>>106	belong+1	x			\bx%x
206*3b9cdfa3SAntonio Huete Jimenez>>101	beshort&0xf	x			\b, bitdepth=
207*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x0			\b1-WHITE=1
208*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x1			\b8
209*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x2			\b16
210*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x3			\b16-SIGNED
211*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x4			\b16-FLOAT
212*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x5			\b(reserved 5)
213*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x6			\b32-SIGNED
214*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x7			\b32-FLOAT
215*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x8			\b5
216*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0x9			\b10
217*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xa			\b5-6-5
218*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xb			\b(reserved %d)
219*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xc			\b(reserved %d)
220*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xd			\b(reserved %d)
221*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xe			\b(reserved %d)
222*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf	0xf			\b1-BLACK=1
223*3b9cdfa3SAntonio Huete Jimenez>>101	beshort&0xf0	x			\b, colorfmt=
224*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x00			\bYONLY
225*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x10			\bYUV240
226*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x20			\bYWV422
227*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x30			\bYWV444
228*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x40			\bCMYK
229*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x50			\bCMYKDIRECT
230*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x60			\bNCOMPONENT
231*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x70			\bRGB
232*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	0x80			\bRGBE
233*3b9cdfa3SAntonio Huete Jimenez>>>101	beshort&0xf0	>0x80			\b(reserved %#x)
234970935fdSSascha Wildner
235970935fdSSascha Wildner# JPEG XL
236970935fdSSascha Wildner# From: Ian Tester
237*3b9cdfa3SAntonio Huete Jimenez# Update:	Joerg Jenderek
238*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XL
239*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jxl.trid.xml
240*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG XL bitmap"
241970935fdSSascha Wildner0	string	\xff\x0a				JPEG XL codestream
242*3b9cdfa3SAntonio Huete Jimenez#!:mime  image/jxl
243*3b9cdfa3SAntonio Huete Jimenez!:mime	image/x-jxl
244970935fdSSascha Wildner!:ext jxl
245970935fdSSascha Wildner
246970935fdSSascha Wildner# JPEG XL (transcoded JPEG file)
247*3b9cdfa3SAntonio Huete Jimenez# Update:	Joerg Jenderek
248*3b9cdfa3SAntonio Huete Jimenez# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XL
249*3b9cdfa3SAntonio Huete Jimenez# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jxl-iso.trid.xml
250*3b9cdfa3SAntonio Huete Jimenez# Note:         called by TrID "JPEG XL bitmap (ISOBMFF)"
251970935fdSSascha Wildner0	string	\x00\x00\x00\x0cJXL\x20\x0d\x0a\x87\x0a	JPEG XL container
252*3b9cdfa3SAntonio Huete Jimenez#!:mime  image/jxl
253*3b9cdfa3SAntonio Huete Jimenez!:mime	image/x-jxl
254970935fdSSascha Wildner!:ext jxl
255