From 00cd9471ddc654368072d2dce2adaec11825c781 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 10 Dec 2021 17:00:58 +0100 Subject: [PATCH] #483: Rollback --- .../plugins/psd/PSDImageWriteParam.java | 69 --- .../imageio/plugins/psd/PSDImageWriter.java | 400 ------------------ .../plugins/psd/PSDImageWriterSpi.java | 77 ---- .../imageio/plugins/psd/PSDProviderInfo.java | 4 +- .../services/javax.imageio.spi.ImageWriterSpi | 1 - .../plugins/psd/PSDImageWriterTest.java | 37 -- 6 files changed, 2 insertions(+), 586 deletions(-) delete mode 100644 imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriteParam.java delete mode 100644 imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriter.java delete mode 100644 imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterSpi.java delete mode 100644 imageio/imageio-psd/src/main/resources/META-INF/services/javax.imageio.spi.ImageWriterSpi delete mode 100644 imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterTest.java diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriteParam.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriteParam.java deleted file mode 100644 index 1b227e14..00000000 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriteParam.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2021, Harald Kuhr - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.twelvemonkeys.imageio.plugins.psd; - -import javax.imageio.ImageWriteParam; -import java.util.Locale; - -/** - * PSDImageWriteParam - */ -public final class PSDImageWriteParam extends ImageWriteParam { - - PSDImageWriteParam() { - this(Locale.getDefault()); - } - - PSDImageWriteParam(final Locale locale) { - super(locale); - - compressionTypes = new String[] { - "None", - "PackBits", - // Two ZIP compression types are defined in spec, never seen in the wild... - // "ZIP", - // "ZIP+Predictor", - }; - compressionType = compressionTypes[1]; - canWriteCompressed = true; - } - - static int getCompressionType(final ImageWriteParam param) { - if (param == null || param.getCompressionMode() != MODE_EXPLICIT || param.getCompressionType() == null || param.getCompressionType().equals("None")) { - return PSD.COMPRESSION_NONE; - } - else if (param.getCompressionType().equals("PackBits")) { - return PSD.COMPRESSION_RLE; - } - - throw new IllegalArgumentException(String.format("Unsupported compression type: %s", param.getCompressionType())); - } -} diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriter.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriter.java deleted file mode 100644 index aa869b66..00000000 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriter.java +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Copyright (c) 2021, Harald Kuhr - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.twelvemonkeys.imageio.plugins.psd; - -import com.twelvemonkeys.imageio.ImageWriterBase; -import com.twelvemonkeys.imageio.metadata.Entry; -import com.twelvemonkeys.imageio.metadata.tiff.TIFF; -import com.twelvemonkeys.imageio.metadata.tiff.TIFFEntry; -import com.twelvemonkeys.imageio.util.IIOUtil; -import com.twelvemonkeys.imageio.util.RasterUtils; -import com.twelvemonkeys.io.enc.EncoderStream; -import com.twelvemonkeys.io.enc.PackBitsEncoder; - -import javax.imageio.*; -import javax.imageio.metadata.IIOMetadata; -import javax.imageio.spi.ImageWriterSpi; -import java.awt.color.ColorSpace; -import java.awt.color.ICC_ColorSpace; -import java.awt.color.ICC_Profile; -import java.awt.image.*; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.ByteOrder; -import java.util.Collections; - -/** - * Minimal ImageWriter for Adobe Photoshop Document (PSD) format. - * - * @author Harald Kuhr - * @author last modified by $Author: haraldk$ - * @version $Id: PSDImageWriter.java,v 1.0 Apr 29, 2008 4:45:52 PM haraldk Exp$ - * @see Adobe Photoshop File Formats Specification - * @see Adobe Photoshop File Format Summary - */ -public final class PSDImageWriter extends ImageWriterBase { - - PSDImageWriter(ImageWriterSpi provider) { - super(provider); - } - - @Override - public IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType, ImageWriteParam param) { - // TODO: Implement - return null; - } - - @Override - public IIOMetadata convertImageMetadata(IIOMetadata inData, ImageTypeSpecifier imageType, ImageWriteParam param) { - // TODO: Implement - return null; - } - - @Override - public ImageWriteParam getDefaultWriteParam() { - return new PSDImageWriteParam(getLocale()); - } - - @Override - public void write(IIOMetadata streamMetadata, IIOImage iioImage, ImageWriteParam param) throws IOException { - assertOutput(); - imageOutput.setByteOrder(ByteOrder.BIG_ENDIAN); - - RenderedImage image = iioImage.getRenderedImage(); - SampleModel sampleModel = image.getSampleModel(); - - int colorComponents = image.getColorModel().getColorSpace().getNumComponents(); - int channels = sampleModel.getNumBands(); - int width = image.getWidth(); - int height = image.getHeight(); - - int bits = getBitsPerSample(sampleModel); - int mode = getColorMode(image.getColorModel()); - // TODO: Allow stream metadata or param to force PSD/PSB (version 1/2)? - boolean largeFormat = width > PSDHeader.PSD_MAX_SIZE || height > PSDHeader.PSD_MAX_SIZE; - - new PSDHeader(channels, width, height, bits, mode, largeFormat).write(imageOutput); - writeColorModeData(image, mode); - writeImageResources(image, mode); - - // Length of the layer and mask information section. (**PSB** length is 8 bytes.) - // TODO: Write an empty dummy layer here, if there's alpha? See below... Or see if Photoshop handles alpha if no layers at all... - if (largeFormat) { - imageOutput.writeLong(0); - } - else { - imageOutput.writeInt(0); - } - - processImageStarted(0); - - // Image Data Section (composite layer only). - // The last section of a Photoshop file contains the image pixel data. - // Image data is stored in planar order: first all the red data, then all the green data, etc. - // Each plane is stored in scan-line order, with no pad bytes, - final int compression = PSDImageWriteParam.getCompressionType(param); - imageOutput.writeShort(compression); - - long byteCountPos = imageOutput.getStreamPosition(); - // PSB (large format) byte counts are actually 32 bit offsets, not 16 bit as described in spec - int[] byteCounts = new int[compression == PSD.COMPRESSION_RLE ? height * channels : 0]; - imageOutput.skipBytes(byteCounts.length * (largeFormat ? 4 : 2)); - - // TODO: Loop over tiles? - Raster tile = sampleModel.getTransferType() == DataBuffer.TYPE_INT && sampleModel instanceof SinglePixelPackedSampleModel - ? RasterUtils.asByteRaster(image.getTile(0, 0)) - : image.getTile(0, 0); - - for (int channel = 0; channel < channels; channel++) { - // TODO: Alpha issues: - // 1. Alpha channel is written (but not read, because there are no layers, and alpha is considered present only if layer count is negative) - // - Can we write a small hidden layer, just to have -1 layers? - // 2. Alpha needs to be premultiplied against white background (to avoid inverse halo) - Raster channelRaster = tile.createChild(0, 0, width, height, 0, 0, new int[] {channel}); - - switch (bits) { - case 1: - // TODO: Figure out why we can't write multi-pixel packed 1 bit samples as bytes... - case 8: - write8BitChannel(channel, colorComponents, mode, compression, channelRaster, byteCounts); - break; - case 16: - write16BitChannel(channel, colorComponents, mode, compression, channelRaster, byteCounts); - break; - case 32: - write32BitChannel(channel, colorComponents, mode, compression, channelRaster, byteCounts); - break; - default: - throw new AssertionError(); // Should be guarded against already - } - - processImageProgress(channel * 100f / channels); - } - - updateByteCounts(byteCountPos, byteCounts, largeFormat); - - processImageComplete(); - } - - private void updateByteCounts(long byteCountPos, int[] byteCounts, boolean largeFormat) throws IOException { - if (byteCounts.length == 0) { - return; - } - - // Update byte counts for RLE - long pos = imageOutput.getStreamPosition(); - - imageOutput.seek(byteCountPos); - if (largeFormat) { - imageOutput.writeInts(byteCounts, 0, byteCounts.length); - } - else { - for (int byteCount : byteCounts) { - imageOutput.writeShort(byteCount); - } - } - - imageOutput.seek(pos); - } - - private void writeColorModeData(RenderedImage image, int mode) throws IOException { - if (mode == PSD.COLOR_MODE_INDEXED) { - IndexColorModel icm = (IndexColorModel) image.getColorModel(); - - // Indexed color images: length is 768; color data contains the color table for the image, in non-interleaved order. - imageOutput.writeInt(768); - byte[] colors = new byte[256]; - - icm.getReds(colors); - imageOutput.write(colors); - icm.getGreens(colors); - imageOutput.write(colors); - icm.getBlues(colors); - imageOutput.write(colors); - } - else { - imageOutput.writeInt(0); - } - } - - private void writeImageResources(RenderedImage image, int mode) throws IOException { - // Length of image resource section. The length may be zero - imageOutput.writeInt(0); - long startImageResources = imageOutput.getStreamPosition(); - - // Write ICC color profile if not "native" sRGB or gray (or bitmap/indexed) - if (mode != PSD.COLOR_MODE_BITMAP && mode != PSD.COLOR_MODE_INDEXED) { - ColorSpace colorSpace = image.getColorModel().getColorSpace(); - if (!colorSpace.isCS_sRGB() && colorSpace instanceof ICC_ColorSpace) { - ICC_Profile profile = ((ICC_ColorSpace) colorSpace).getProfile(); - ICCProfile.writeData(imageOutput, profile); - } - } - - // Write creator software (Exif) - Entry software = new TIFFEntry(TIFF.TAG_SOFTWARE, TIFF.TYPE_ASCII, "TwelveMonkeys ImageIO PSD writer " + originatingProvider.getVersion()); - PSDEXIF1Data.writeData(imageOutput, Collections.singleton(software)); - - long endImageResources = imageOutput.getStreamPosition(); - - // Update image resources length - imageOutput.seek(startImageResources - 4); - imageOutput.writeInt((int) (endImageResources - startImageResources)); - imageOutput.seek(endImageResources); - } - - private void write8BitChannel(int channel, int colorComponents, int colorMode, int compression, Raster raster, int[] byteCounts) throws IOException { - int width = raster.getWidth(); - int height = raster.getHeight(); - - byte[] rowBytes = null; - - for (int y = 0; y < height; y++) { - rowBytes = (byte[]) raster.getDataElements(0, y, width, 1, rowBytes); - - // Photoshop likes to store CMYK values inverted (but not the alpha value) - if (colorMode == PSD.COLOR_MODE_CMYK && channel < colorComponents) { - for (int i = 0; i < rowBytes.length; i++) { - rowBytes[i] = (byte) (0xff - rowBytes[i] & 0xff); - } - } - - if (compression == PSD.COMPRESSION_NONE) { - imageOutput.write(rowBytes); - } - else if (compression == PSD.COMPRESSION_RLE) { - long startPos = imageOutput.getStreamPosition(); - - // The RLE compressed data follows, with each scan line compressed separately - try (OutputStream stream = new EncoderStream(IIOUtil.createStreamAdapter(imageOutput), new PackBitsEncoder())) { - stream.write(rowBytes); - } - - long endPos = imageOutput.getStreamPosition(); - byteCounts[y + channel * height] = (int) (endPos - startPos); - } - else { - throw new IIOException("PSD with ZIP compression not supported"); - } - } - } - - private void write16BitChannel(int channel, int colorComponents, int colorMode, int compression, Raster raster, int[] byteCounts) throws IOException { - int width = raster.getWidth(); - int height = raster.getHeight(); - - short[] row = null; - - for (int y = 0; y < height; y++) { - row = (short[]) raster.getDataElements(0, y, width, 1, row); - - // Photoshop likes to store CMYK values inverted (but not the alpha value) - if (colorMode == PSD.COLOR_MODE_CMYK && channel < colorComponents) { - for (int i = 0; i < row.length; i++) { - row[i] = (short) (0xffff - row[i] & 0xffff); - } - } - - if (compression == PSD.COMPRESSION_NONE) { - imageOutput.writeShorts(row, 0, row.length); - } - else if (compression == PSD.COMPRESSION_RLE) { - long startPos = imageOutput.getStreamPosition(); - - // The RLE compressed data follows, with each scan line compressed separately - try (DataOutputStream stream = new DataOutputStream(new EncoderStream(IIOUtil.createStreamAdapter(imageOutput), new PackBitsEncoder()))) { - for (short sample : row) { - stream.writeShort(sample); - } - } - - long endPos = imageOutput.getStreamPosition(); - byteCounts[y + channel * height] = (int) (endPos - startPos); - } - else { - throw new IIOException("PSD with ZIP compression not supported"); - } - } - } - - private void write32BitChannel(int channel, int colorComponents, int colorMode, int compression, Raster raster, int[] byteCounts) throws IOException { - int width = raster.getWidth(); - int height = raster.getHeight(); - - int[] row = null; - - for (int y = 0; y < height; y++) { - row = (int[]) raster.getDataElements(0, y, width, 1, row); - - // Photoshop likes to store CMYK values inverted (but not the alpha value) - if (colorMode == PSD.COLOR_MODE_CMYK && channel < colorComponents) { - for (int i = 0; i < row.length; i++) { - row[i] = 0xffffffff - row[i]; - } - } - - if (compression == PSD.COMPRESSION_NONE) { - imageOutput.writeInts(row, 0, row.length); - } - else if (compression == PSD.COMPRESSION_RLE) { - long startPos = imageOutput.getStreamPosition(); - - // The RLE compressed data follows, with each scan line compressed separately - try (DataOutputStream stream = new DataOutputStream(new EncoderStream(IIOUtil.createStreamAdapter(imageOutput), new PackBitsEncoder()))) { - for (int sample : row) { - stream.writeInt(sample); - } - } - - long endPos = imageOutput.getStreamPosition(); - byteCounts[y + channel * height] = (int) (endPos - startPos); - } - else { - throw new IIOException("PSD with ZIP compression not supported"); - } - } - } - - static int getColorMode(ColorModel colorModel) { - if (colorModel instanceof IndexColorModel) { - if (colorModel.getPixelSize() == 1) { - return PSD.COLOR_MODE_BITMAP; - } - else { - return PSD.COLOR_MODE_INDEXED; - } - } - - int csType = colorModel.getColorSpace().getType(); - switch (csType) { - case ColorSpace.TYPE_GRAY: - if (colorModel.getPixelSize() == 1) { - return PSD.COLOR_MODE_BITMAP; - } - else { - return PSD.COLOR_MODE_GRAYSCALE; - } - case ColorSpace.TYPE_RGB: - return PSD.COLOR_MODE_RGB; - case ColorSpace.TYPE_CMYK: - return PSD.COLOR_MODE_CMYK; - default: - throw new IllegalArgumentException("Unsupported color space type for PSD: " + csType); - } - } - - static int getBitsPerSample(SampleModel sampleModel) { - int bits = sampleModel.getSampleSize(0); - - for (int i = 1; i < sampleModel.getNumBands(); i++) { - if (bits != sampleModel.getSampleSize(i)) { - throw new IllegalArgumentException("All samples must be of equal size for PSD: " + bits); - } - } - - switch (bits) { - case 1: - case 8: - case 16: - case 32: - return (short) bits; - default: - throw new IllegalArgumentException("Unsupported sample size for PSD (expected 1, 8, 16 or 32): " + bits); - } - } - - public static void main(String[] args) throws IOException { - BufferedImage image = ImageIO.read(new File(args[0])); - ImageIO.write(image, "PSD", new File("test.psd")); - } -} diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterSpi.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterSpi.java deleted file mode 100644 index 34aff2d5..00000000 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterSpi.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2021, Harald Kuhr - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * * Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.twelvemonkeys.imageio.plugins.psd; - -import com.twelvemonkeys.imageio.spi.ImageWriterSpiBase; - -import javax.imageio.ImageTypeSpecifier; -import javax.imageio.ImageWriter; -import java.util.Locale; - -import static com.twelvemonkeys.imageio.plugins.psd.PSDImageWriter.getBitsPerSample; -import static com.twelvemonkeys.imageio.plugins.psd.PSDImageWriter.getColorMode; - -/** - * PSDImageWriterSpi - */ -public final class PSDImageWriterSpi extends ImageWriterSpiBase { - - public PSDImageWriterSpi() { - super(new PSDProviderInfo()); - } - - @Override - public boolean canEncodeImage(ImageTypeSpecifier type) { - // PSD supports: - // - 1, 8, 16 or 32 bit/sample - // - Number of samples <= 56 - // - RGB, CMYK, Gray, Indexed color - try { - getBitsPerSample(type.getSampleModel()); - getColorMode(type.getColorModel()); - } - catch (IllegalArgumentException ignore) { - // We can't write this type - return false; - } - - return type.getNumBands() <= 56; // Can't be negative - } - - @Override - public ImageWriter createWriterInstance(Object extension) { - return new PSDImageWriter(this); - } - - public String getDescription(final Locale pLocale) { - return "Adobe Photoshop Document (PSD) image writer"; - } -} diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDProviderInfo.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDProviderInfo.java index fc9f5ed3..f620fa11 100644 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDProviderInfo.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDProviderInfo.java @@ -54,8 +54,8 @@ final class PSDProviderInfo extends ReaderWriterProviderInfo { }, "com.twelvemonkeys.imageio.plugins.psd.PSDImageReader", new String[] {"com.twelvemonkeys.imageio.plugins.psd.PSDImageReaderSpi"}, - "com.twelvemonkeys.imageio.plugins.psd.PSDImageWriter", - new String[] {"com.twelvemonkeys.imageio.plugins.psd.PSDImageWriterSpi"}, + null, + null, false, null, null, null, null, true, PSDMetadata.NATIVE_METADATA_FORMAT_NAME, PSDMetadata.NATIVE_METADATA_FORMAT_CLASS_NAME, null, null ); diff --git a/imageio/imageio-psd/src/main/resources/META-INF/services/javax.imageio.spi.ImageWriterSpi b/imageio/imageio-psd/src/main/resources/META-INF/services/javax.imageio.spi.ImageWriterSpi deleted file mode 100644 index 63c630ff..00000000 --- a/imageio/imageio-psd/src/main/resources/META-INF/services/javax.imageio.spi.ImageWriterSpi +++ /dev/null @@ -1 +0,0 @@ -com.twelvemonkeys.imageio.plugins.psd.PSDImageWriterSpi diff --git a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterTest.java b/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterTest.java deleted file mode 100644 index ef84f9c3..00000000 --- a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageWriterTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.twelvemonkeys.imageio.plugins.psd; - -import com.twelvemonkeys.imageio.util.ImageWriterAbstractTest; - -import javax.imageio.spi.ImageWriterSpi; -import java.awt.image.BufferedImage; -import java.awt.image.RenderedImage; -import java.util.Arrays; -import java.util.List; - -/** - * PSDImageWriterTest. - * - * @author Harald Kuhr - * @author last modified by $Author: haraldk$ - * @version $Id: PSDImageWriterTest.java,v 1.0 05/05/2021 haraldk Exp$ - */ -public class PSDImageWriterTest extends ImageWriterAbstractTest { - @Override - protected ImageWriterSpi createProvider() { - return new PSDImageWriterSpi(); - } - - @Override - protected List getTestData() { - return Arrays.asList( - new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB), - new BufferedImage(301, 199, BufferedImage.TYPE_INT_ARGB), - new BufferedImage(299, 201, BufferedImage.TYPE_3BYTE_BGR), - new BufferedImage(160, 90, BufferedImage.TYPE_4BYTE_ABGR), - new BufferedImage(90, 160, BufferedImage.TYPE_BYTE_GRAY), - new BufferedImage(30, 20, BufferedImage.TYPE_USHORT_GRAY), - new BufferedImage(30, 20, BufferedImage.TYPE_BYTE_BINARY), - new BufferedImage(30, 20, BufferedImage.TYPE_BYTE_INDEXED) - ); - } -}