It seems that the test code could not be attached, so I attach it with the
extension ".txt".

2022年10月27日(木) 13:18 cottonspace <[email protected]>:

> Hello.
>
> I executed test. and run "exiftool" for each image files.
>
> The following fields I was concerned about seem to be determined based on
> the resized image, as expected, rather than the Exif value of the original
> image.
>
> - Orientation: copy from *original* image.
> - Image Width: based on *resized* image.
> - Image Height: based on *resized* image.
> - Y Cb Cr Sub Sampling: based on *resized* image.
>
> I thought my concern was unnecessary. My question is solved.
>
> Regards.
>


-- 
[email protected]
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import javax.imageio.ImageIO;

import org.apache.commons.imaging.Imaging;
import org.apache.commons.imaging.ImagingException;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;

public class ExifCopyTest {

        public static void main(String[] args) throws IOException, 
ImagingException {

                // Parameters
                File fileOriginal = new File("original.jpg");
                File fileResized = new File("resized.jpg");
                File fileExifUpdated = new File("exif-updated.jpg");

                // Read original image
                byte[] bytesOriginal = 
Files.readAllBytes(fileOriginal.toPath());
                BufferedImage imageOriginal = null;
                ByteArrayInputStream bais = new 
ByteArrayInputStream(bytesOriginal);
                imageOriginal = ImageIO.read(bais);

                // Resize (half size)
                int dw = imageOriginal.getWidth() / 2;
                int dh = imageOriginal.getHeight() / 2;
                BufferedImage imageResized = new BufferedImage(dw, dh, 
imageOriginal.getType());
                Graphics g = imageResized.createGraphics();
                g.drawImage(imageOriginal.getScaledInstance(dw, dh, 
Image.SCALE_AREA_AVERAGING), 0, 0, dw, dh, null);
                g.dispose();

                // Get resized image to bytes
                byte[] bytesResized = null;
                ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
                BufferedOutputStream bos1 = new BufferedOutputStream(baos1);
                ImageIO.write(imageResized, "jpg", bos1);
                bytesResized = baos1.toByteArray();

                // Save (Resized only)
                Files.write(fileResized.toPath(), bytesResized);

                // Apply original metadata into resized image
                TiffImageMetadata exif = ((JpegImageMetadata) 
Imaging.getMetadata(bytesOriginal)).getExif();
                ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
                new ExifRewriter().updateExifMetadataLossy(bytesResized, baos2, 
exif.getOutputSet());
                byte[] bytesExifUpdated = baos2.toByteArray();

                // Save (Exif Updated)
                Files.write(fileExifUpdated.toPath(), bytesExifUpdated);
        }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to