View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.imaging.formats.jpeg.segments;
18  
19  import java.io.ByteArrayInputStream;
20  import java.io.IOException;
21  import java.io.InputStream;
22  
23  import org.apache.commons.imaging.ImagingException;
24  import org.apache.commons.imaging.ImagingParameters;
25  import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
26  import org.apache.commons.imaging.formats.jpeg.iptc.IptcParser;
27  import org.apache.commons.imaging.formats.jpeg.iptc.PhotoshopApp13Data;
28  
29  public class App13Segment extends AppnSegment {
30  
31      public App13Segment(final int marker, final byte[] segmentData) throws IOException {
32          this(marker, segmentData.length, new ByteArrayInputStream(segmentData));
33      }
34  
35      public App13Segment(final int marker, final int markerLength, final InputStream is) throws IOException {
36          super(marker, markerLength, is);
37  
38          // isIPTCJpegSegment = new IptcParser().isIPTCJpegSegment(bytes);
39          // if (isIPTCJpegSegment)
40          // {
41          // /*
42          // * In practice, App13 segments are only used for Photoshop/IPTC
43          // * metadata. However, we should not treat App13 signatures without
44          // * Photoshop's signature as Photoshop/IPTC segments.
45          // */
46          // boolean verbose = false;
47          // boolean strict = false;
48          // elements.addAll(new IptcParser().parseIPTCJPEGSegment(bytes,
49          // verbose, strict));
50          // }
51      }
52  
53      public boolean isPhotoshopJpegSegment() {
54          return new IptcParser().isPhotoshopJpegSegment(getSegmentData());
55      }
56  
57      public PhotoshopApp13Data parsePhotoshopSegment(final ImagingParameters<JpegImagingParameters> params) throws ImagingException, IOException {
58          /*
59           * In practice, App13 segments are only used for Photoshop/IPTC metadata. However, we should not treat App13 signatures without Photoshop's signature as
60           * Photoshop/IPTC segments.
61           */
62          if (!isPhotoshopJpegSegment()) {
63              return null;
64          }
65  
66          return new IptcParser().parsePhotoshopSegment(getSegmentData(), params);
67      }
68  }