001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.imaging.formats.jpeg; 018 019import java.util.Arrays; 020import java.util.Collections; 021import java.util.List; 022 023import org.apache.commons.imaging.common.BinaryConstant; 024import org.apache.commons.imaging.common.BinaryFunctions; 025 026public final class JpegConstants { 027 public static final int MAX_SEGMENT_SIZE = 0xffff; 028 029 public static final BinaryConstant JFIF0_SIGNATURE = new BinaryConstant(new byte[] { 0x4a, // J 030 0x46, // F 031 0x49, // I 032 0x46, // F 033 0x0, // 034 }); 035 public static final BinaryConstant JFIF0_SIGNATURE_ALTERNATIVE = new BinaryConstant(new byte[] { 0x4a, // J 036 0x46, // F 037 0x49, // I 038 0x46, // F 039 0x20, // 040 }); 041 042 public static final BinaryConstant EXIF_IDENTIFIER_CODE = new BinaryConstant(new byte[] { 0x45, // E 043 0x78, // x 044 0x69, // i 045 0x66, // f 046 }); 047 048 public static final BinaryConstant XMP_IDENTIFIER = new BinaryConstant(new byte[] { 0x68, // h 049 0x74, // t 050 0x74, // t 051 0x70, // p 052 0x3A, // : 053 0x2F, // / 054 0x2F, // / 055 0x6E, // n 056 0x73, // s 057 0x2E, // . 058 0x61, // a 059 0x64, // d 060 0x6F, // o 061 0x62, // b 062 0x65, // e 063 0x2E, // . 064 0x63, // c 065 0x6F, // o 066 0x6D, // m 067 0x2F, // / 068 0x78, // x 069 0x61, // a 070 0x70, // p 071 0x2F, // / 072 0x31, // 1 073 0x2E, // . 074 0x30, // 0 075 0x2F, // / 076 0, // 0-terminated us-ascii string. 077 }); 078 079 public static final BinaryConstant SOI = new BinaryConstant(new byte[] { (byte) 0xff, (byte) 0xd8 }); 080 public static final BinaryConstant EOI = new BinaryConstant(new byte[] { (byte) 0xff, (byte) 0xd9 }); 081 082 public static final int JPEG_APP0 = 0xE0; 083 public static final int JPEG_APP0_MARKER = 0xff00 | JPEG_APP0; 084 public static final int JPEG_APP1_MARKER = 0xff00 | JPEG_APP0 + 1; 085 public static final int JPEG_APP2_MARKER = 0xff00 | JPEG_APP0 + 2; 086 public static final int JPEG_APP13_MARKER = 0xff00 | JPEG_APP0 + 13; 087 public static final int JPEG_APP14_MARKER = 0xff00 | JPEG_APP0 + 14; 088 public static final int JPEG_APP15_MARKER = 0xff00 | JPEG_APP0 + 15; 089 090 public static final int JFIF_MARKER = 0xFFE0; 091 public static final int SOF0_MARKER = 0xFFc0; 092 public static final int SOF1_MARKER = 0xFFc0 + 0x1; 093 public static final int SOF2_MARKER = 0xFFc0 + 0x2; 094 public static final int SOF3_MARKER = 0xFFc0 + 0x3; 095 public static final int DHT_MARKER = 0xFFc0 + 0x4; 096 public static final int SOF5_MARKER = 0xFFc0 + 0x5; 097 public static final int SOF6_MARKER = 0xFFc0 + 0x6; 098 public static final int SOF7_MARKER = 0xFFc0 + 0x7; 099 public static final int SOF8_MARKER = 0xFFc0 + 0x8; 100 public static final int SOF9_MARKER = 0xFFc0 + 0x9; 101 public static final int SOF10_MARKER = 0xFFc0 + 0xa; 102 public static final int SOF11_MARKER = 0xFFc0 + 0xb; 103 public static final int DAC_MARKER = 0xFFc0 + 0xc; 104 public static final int SOF13_MARKER = 0xFFc0 + 0xd; 105 public static final int SOF14_MARKER = 0xFFc0 + 0xe; 106 public static final int SOF15_MARKER = 0xFFc0 + 0xf; 107 108 // marker for restart intervals 109 public static final int DRI_MARKER = 0xFFdd; 110 public static final int RST0_MARKER = 0xFFd0; 111 public static final int RST1_MARKER = 0xFFd0 + 0x1; 112 public static final int RST2_MARKER = 0xFFd0 + 0x2; 113 public static final int RST3_MARKER = 0xFFd0 + 0x3; 114 public static final int RST4_MARKER = 0xFFd0 + 0x4; 115 public static final int RST5_MARKER = 0xFFd0 + 0x5; 116 public static final int RST6_MARKER = 0xFFd0 + 0x6; 117 public static final int RST7_MARKER = 0xFFd0 + 0x7; 118 119 public static final int EOI_MARKER = 0xFFd9; 120 public static final int SOS_MARKER = 0xFFda; 121 public static final int DQT_MARKER = 0xFFdb; 122 public static final int DNL_MARKER = 0xFFdc; 123 public static final int COM_MARKER = 0xFFfe; 124 125 public static final List<Integer> MARKERS = Collections.unmodifiableList( 126 Arrays.asList(JPEG_APP0, JPEG_APP0_MARKER, JPEG_APP1_MARKER, JPEG_APP2_MARKER, JPEG_APP13_MARKER, JPEG_APP14_MARKER, JPEG_APP15_MARKER, JFIF_MARKER, 127 SOF0_MARKER, SOF1_MARKER, SOF2_MARKER, SOF3_MARKER, DHT_MARKER, SOF5_MARKER, SOF6_MARKER, SOF7_MARKER, SOF8_MARKER, SOF9_MARKER, 128 SOF10_MARKER, SOF11_MARKER, DAC_MARKER, SOF13_MARKER, SOF14_MARKER, SOF15_MARKER, EOI_MARKER, SOS_MARKER, DQT_MARKER, DNL_MARKER, 129 COM_MARKER, DRI_MARKER, RST0_MARKER, RST1_MARKER, RST2_MARKER, RST3_MARKER, RST4_MARKER, RST5_MARKER, RST6_MARKER, RST7_MARKER)); 130 131 public static final BinaryConstant ICC_PROFILE_LABEL = new BinaryConstant( 132 new byte[] { 0x49, 0x43, 0x43, 0x5F, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45, 0x0 }); 133 134 public static final BinaryConstant PHOTOSHOP_IDENTIFICATION_STRING = new BinaryConstant(new byte[] { 0x50, // P 135 0x68, // h 136 0x6F, // o 137 0x74, // t 138 0x6F, // o 139 0x73, // s 140 0x68, // h 141 0x6F, // o 142 0x70, // p 143 0x20, // 144 0x33, // 3 145 0x2E, // . 146 0x30, // 0 147 0, }); 148 public static final int CONST_8BIM = BinaryFunctions.charsToQuad('8', 'B', 'I', 'M'); 149 150 private JpegConstants() { 151 } 152}