xref: /freebsd/contrib/file/magic/Magdir/jpeg (revision 43a5ec4e)
1b6cee71dSXin LI
2b6cee71dSXin LI#------------------------------------------------------------------------------
3*43a5ec4eSXin LI# $File: jpeg,v 1.36 2021/08/28 12:30:52 christos Exp $
4b6cee71dSXin LI# JPEG images
5b6cee71dSXin LI# SunOS 5.5.1 had
6b6cee71dSXin LI#
7b6cee71dSXin LI#	0	string		\377\330\377\340	JPEG file
8b6cee71dSXin LI#	0	string		\377\330\377\356	JPG file
9b6cee71dSXin LI#
10b6cee71dSXin LI# both of which turn into "JPEG image data" here.
11b6cee71dSXin LI#
12*43a5ec4eSXin LI0	belong			0xffd8fff7	JPEG-LS image data
13*43a5ec4eSXin LI!:mime	image/jls
14*43a5ec4eSXin LI!:ext jls
15*43a5ec4eSXin LI>0	use			jpeg
16*43a5ec4eSXin LI
17*43a5ec4eSXin LI0	belong&0xffffff00	0xffd8ff00	JPEG image data
18b6cee71dSXin LI!:mime	image/jpeg
19b6cee71dSXin LI!:apple	8BIMJPEG
205f0216bdSXin LI!:strength *3
215f0216bdSXin LI!:ext jpeg/jpg/jpe/jfif
22*43a5ec4eSXin LI>0	use			jpeg
23*43a5ec4eSXin LI
24*43a5ec4eSXin LI0	name		jpeg
25b6cee71dSXin LI>6	string		JFIF		\b, JFIF standard
26b6cee71dSXin LI# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
27b6cee71dSXin LI# in a vain attempt to add image size reporting for JFIF.  Note that these
28b6cee71dSXin LI# tests are not fool-proof since some perfectly valid JPEGs are currently
29b6cee71dSXin LI# impossible to specify in magic(4) format.
30b6cee71dSXin LI# First, a little JFIF version info:
31b6cee71dSXin LI>>11	byte		x		\b %d.
32b6cee71dSXin LI>>12	byte		x		\b%02d
33b6cee71dSXin LI# Next, the resolution or aspect ratio of the image:
34c2931133SXin LI>>13	byte		0		\b, aspect ratio
35c2931133SXin LI>>13	byte		1		\b, resolution (DPI)
36c2931133SXin LI>>13	byte		2		\b, resolution (DPCM)
37c2931133SXin LI>>14	beshort		x		\b, density %dx
38c2931133SXin LI>>16	beshort		x		\b%d
39c2931133SXin LI>>4	beshort		x		\b, segment length %d
40b6cee71dSXin LI# Next, show thumbnail info, if it exists:
41b6cee71dSXin LI>>18	byte		!0		\b, thumbnail %dx
42b6cee71dSXin LI>>>19	byte		x		\b%d
434460e5b0SXin LI>6	string		Exif		\b, Exif standard: [
444460e5b0SXin LI>>12	indirect/r	x
454460e5b0SXin LI>>12	string		x		\b]
46c2931133SXin LI
47c2931133SXin LI# Jump to the first segment
48c2931133SXin LI>(4.S+4)	use		jpeg_segment
49c2931133SXin LI
50c2931133SXin LI# This uses recursion...
51c2931133SXin LI0		name		jpeg_segment
52c2931133SXin LI>0	beshort		0xFFFE
535f0216bdSXin LI# Recursion handled by FFE0
545f0216bdSXin LI#>>(2.S+2)	use			jpeg_segment
55c2931133SXin LI>>2	pstring/HJ	x		\b, comment: "%s"
56c2931133SXin LI
57c2931133SXin LI>0	beshort		0xFFC0
58c2931133SXin LI>>(2.S+2)	use			jpeg_segment
59c2931133SXin LI>>4	byte		x		\b, baseline, precision %d
60c2931133SXin LI>>7	beshort		x		\b, %dx
61c2931133SXin LI>>5	beshort		x		\b%d
6248c779cdSXin LI>>9	byte		x		\b, components %d
63c2931133SXin LI
64c2931133SXin LI>0	beshort		0xFFC1
65c2931133SXin LI>>(2.S+2)	use			jpeg_segment
66c2931133SXin LI>>4	byte		x		\b, extended sequential, precision %d
67c2931133SXin LI>>7	beshort		x		\b, %dx
68c2931133SXin LI>>5	beshort		x		\b%d
6948c779cdSXin LI>>9	byte		x		\b, components %d
70c2931133SXin LI
71c2931133SXin LI>0	beshort		0xFFC2
72c2931133SXin LI>>(2.S+2)	use			jpeg_segment
73c2931133SXin LI>>4	byte		x		\b, progressive, precision %d
74c2931133SXin LI>>7	beshort		x		\b, %dx
75c2931133SXin LI>>5	beshort		x		\b%d
7648c779cdSXin LI>>9	byte		x		\b, components %d
77c2931133SXin LI
78c2931133SXin LI# Define Huffman Tables
79c2931133SXin LI>0	beshort		0xFFC4
80c2931133SXin LI>>(2.S+2)	use			jpeg_segment
81c2931133SXin LI
824460e5b0SXin LI>0	beshort		0xFFE1
835f0216bdSXin LI# Recursion handled by FFE0
844460e5b0SXin LI#>>(2.S+2)	use			jpeg_segment
854460e5b0SXin LI>>4	string		Exif		\b, Exif Standard: [
864460e5b0SXin LI>>>10	indirect/r	x
874460e5b0SXin LI>>>10	string		x		\b]
884460e5b0SXin LI
89c2931133SXin LI# Application specific markers
90c2931133SXin LI>0	beshort&0xFFE0	=0xFFE0
91c2931133SXin LI>>(2.S+2)	use			jpeg_segment
92c2931133SXin LI
93c2931133SXin LI# DB: Define Quantization tables
94c2931133SXin LI# DD: Define Restart interval [XXX: wrong here, it is 4 bytes]
95c2931133SXin LI# D8: Start of image
96c2931133SXin LI# D9: End of image
97c2931133SXin LI# Dn: Restart
98c2931133SXin LI>0	beshort&0xFFD0	=0xFFD0
995f0216bdSXin LI>>0	beshort&0xFFE0	!0xFFE0
1005f0216bdSXin LI>>>(2.S+2)	use			jpeg_segment
101b6cee71dSXin LI
102*43a5ec4eSXin LI#>0	beshort		x		unknown %#x
1034460e5b0SXin LI#>>(2.S+2)	use			jpeg_segment
1044460e5b0SXin LI
105b6cee71dSXin LI# HSI is Handmade Software's proprietary JPEG encoding scheme
106b6cee71dSXin LI0	string		hsi1		JPEG image data, HSI proprietary
107b6cee71dSXin LI
108b6cee71dSXin LI# From: David Santinoli <david@santinoli.com>
109b6cee71dSXin LI0	string		\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A	JPEG 2000
110b6cee71dSXin LI# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
111b6cee71dSXin LI# Added sub-entries for JP2, JPX, JPM and MJ2 formats; added mimetypes
112b6cee71dSXin LI# https://github.com/bitsgalore/jp2kMagic
113b6cee71dSXin LI#
114b6cee71dSXin LI# Now read value of 'Brand' field, which yields a few possibilities:
115b6cee71dSXin LI>20	string		\x6a\x70\x32\x20	Part 1 (JP2)
116b6cee71dSXin LI!:mime	image/jp2
117b6cee71dSXin LI>20	string		\x6a\x70\x78\x20	Part 2 (JPX)
118b6cee71dSXin LI!:mime	image/jpx
119b6cee71dSXin LI>20	string		\x6a\x70\x6d\x20	Part 6 (JPM)
120b6cee71dSXin LI!:mime	image/jpm
121b6cee71dSXin LI>20	string		\x6d\x6a\x70\x32	Part 3 (MJ2)
122b6cee71dSXin LI!:mime	video/mj2
123b6cee71dSXin LI
124b6cee71dSXin LI# Type: JPEG 2000 codesream
125b6cee71dSXin LI# From: Mathieu Malaterre <mathieu.malaterre@gmail.com>
126b6cee71dSXin LI0	belong		0xff4fff51						JPEG 2000 codestream
127b6cee71dSXin LI45	beshort		0xff52
128a5d223e6SXin LI
129a5d223e6SXin LI# JPEG extended range
130a5d223e6SXin LI0	string		\x49\x49\xbc
131a5d223e6SXin LI>3	byte		1
132a5d223e6SXin LI>>4	lelong%2	0	JPEG-XR
133a5d223e6SXin LI!:mime	image/jxr
134a5d223e6SXin LI!:ext	jxr
135*43a5ec4eSXin LI
136*43a5ec4eSXin LI# JPEG XL
137*43a5ec4eSXin LI# From: Ian Tester
138*43a5ec4eSXin LI0	string	\xff\x0a				JPEG XL codestream
139*43a5ec4eSXin LI!:mime  image/jxl
140*43a5ec4eSXin LI!:ext jxl
141*43a5ec4eSXin LI
142*43a5ec4eSXin LI# JPEG XL (transcoded JPEG file)
143*43a5ec4eSXin LI0	string	\x00\x00\x00\x0cJXL\x20\x0d\x0a\x87\x0a	JPEG XL container
144*43a5ec4eSXin LI!:mime  image/jxl
145*43a5ec4eSXin LI!:ext jxl
146