This is an automated email from the git hooks/post-receive script. apo pushed a commit to branch master in repository libtwelvemonkeys-java.
commit a5016060ffd5dfaa0ebfe8600849890be7d825f9 Author: Markus Koschany <[email protected]> Date: Tue Jun 27 14:12:10 2017 +0200 Add initial debian directory --- debian/README.source | 13 + debian/changelog | 5 + debian/compat | 1 + debian/control | 57 ++ debian/copyright | 105 +++ debian/libtwelvemonkeys-java-doc.doc-base.api | 10 + debian/libtwelvemonkeys-java-doc.install | 3 + debian/libtwelvemonkeys-java.poms | 55 ++ debian/maven.ignoreRules | 9 + debian/maven.properties | 3 + debian/maven.rules | 32 + .../no-jmagick-and-imagemagick-support.patch | 872 +++++++++++++++++++++ debian/patches/series | 3 + debian/patches/servlet3.1.patch | 35 + debian/patches/use-local-jars.patch | 57 ++ debian/rules | 10 + debian/source/format | 1 + debian/watch | 2 + 18 files changed, 1273 insertions(+) diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 0000000..1891757 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,13 @@ +Information about libtwelvemonkeys-java +--------------------------------------- + +This package was debianized using the mh_make command +from the maven-debian-helper package. + +The build system uses Maven but prevents it from downloading +anything from the Internet, making the build compliant with +the Debian policy. + +Tests are disabled because of the huge amount of images that are included in +Twelvemonkeys. Some of them are non-free (e.g. Lenna image) or the origin is +unknown. In total the source tarball size is thus almost reduced by 100 MB. diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..b5f7d75 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +libtwelvemonkeys-java (3.3.2-1) unstable; urgency=medium + + * Initial release (Closes: #866099). + + -- Markus Koschany <[email protected]> Tue, 27 Jun 2017 13:20:31 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +10 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..6c6d6ad --- /dev/null +++ b/debian/control @@ -0,0 +1,57 @@ +Source: libtwelvemonkeys-java +Section: java +Priority: optional +Maintainer: Debian Java Maintainers <[email protected]> +Uploaders: + Markus Koschany <[email protected]> +Build-Depends: + debhelper (>= 10), + default-jdk, + default-jdk-doc, + maven-debian-helper (>= 2.1), + libcommons-fileupload-java, + libmaven-javadoc-plugin-java, + libservlet3.1-java +Standards-Version: 4.0.0 +Vcs-Git: https://anonscm.debian.org/git/pkg-java/libtwelvemonkeys-java.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/libtwelvemonkeys-java.git +Homepage: https://github.com/haraldk/TwelveMonkeys + +Package: libtwelvemonkeys-java +Architecture: all +Depends: + ${maven:Depends}, + ${misc:Depends} +Suggests: + libtwelvemonkeys-java-doc, + ${maven:OptionalDepends} +Description: collection of plugins and extensions for Java's ImageIO + These plugins extend the number of image file formats supported in Java, using + the javax.imageio.* package. The main purpose of this project is to provide + support for formats not covered by the JRE itself. + . + Supported image formats (read and write support may vary): + BMP, JPEG, JPEG-2000, PNM, PSD, TIFF, HDR, IFF, PCX, PICT, SGI, TGA, ICNS, ICO + & CUR, Thumbs.db, SVG and WMF. + +Package: libtwelvemonkeys-java-doc +Architecture: all +Section: doc +Depends: + ${misc:Depends} +Recommends: + ${maven:DocDepends}, + ${maven:DocOptionalDepends} +Suggests: + libtwelvemonkeys-java +Description: Documentation for libtwelvemonkeys-java + Twelvemonkeys is a collection of plugins and extensions for Java's ImageIO. + The main purpose of this project is to provide support for image file formats + not covered by the JRE itself. + . + Supported image formats (read and write support may vary): + BMP, JPEG, JPEG-2000, PNM, PSD, TIFF, HDR, IFF, PCX, PICT, SGI, TGA, ICNS, ICO + & CUR, Thumbs.db, SVG and WMF. + . + This package contains the API documentation of libtwelvemonkeys-java. + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..2b0e7d5 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,105 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Twelvemonkeys +Source: https://github.com/haraldk/TwelveMonkeys +Files-Excluded: + */test + +Files: * +Copyright: 2008-2017, Harald Kuhr <[email protected]> +License: BSD-3-clause + +Files: sandbox/sandbox-common/src/main/java/com/twelvemonkeys/image/NoiseFilter.java +Copyright: 2012, Harald Kuhr + 2006, Jerry Huxtable +License: BSD-3-clause and Apache-2.0 + +Files: common/common-image/src/main/java/com/twelvemonkeys/image/IndexImage.java +Copyright: 2008, Harald Kuhr + 2000, The Apache Software Foundation. +License: BSD-3-clause and Apache-1.1 + +Files: debian/* +Copyright: 2017, Markus Koschany <[email protected]> +License: Apache-2.0 + +License: Apache-2.0 + On Debian systems, the full text of the Apache-2.0 license + can be found in the file '/usr/share/common-licenses/Apache-2.0' + +License: BSD-3-clause + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + o Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + o 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. + . + o Neither the name "TwelveMonkeys" 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 OWNER 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. + +License: Apache-1.1 + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2000 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. 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. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by the Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Batik" and "Apache Software Foundation" must not be used to + * endorse or promote products derived from this software without prior + * written permission. For written permission, please contact + * [email protected]. + * + * 5. Products derived from this software may not be called "Apache", nor may + * "Apache" appear in their name, without prior written permission of the + * Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, 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. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of the Apache Software Foundation. For more information on the + * Apache Software Foundation, please see <http://www.apache.org/>. + * + ****************************************************************************** diff --git a/debian/libtwelvemonkeys-java-doc.doc-base.api b/debian/libtwelvemonkeys-java-doc.doc-base.api new file mode 100644 index 0000000..3276eb3 --- /dev/null +++ b/debian/libtwelvemonkeys-java-doc.doc-base.api @@ -0,0 +1,10 @@ +Document: libtwelvemonkeys-java +Title: API Javadoc for Twelvemonkeys +Author: Twelvemonkeys developers +Abstract: This is the API Javadoc provided for the + libtwelvemonkeys-java libraries. +Section: Programming + +Format: HTML +Index: /usr/share/doc/libtwelvemonkeys-java/api/index.html +Files: /usr/share/doc/libtwelvemonkeys-java/api/* diff --git a/debian/libtwelvemonkeys-java-doc.install b/debian/libtwelvemonkeys-java-doc.install new file mode 100644 index 0000000..5a919bc --- /dev/null +++ b/debian/libtwelvemonkeys-java-doc.install @@ -0,0 +1,3 @@ +lib/site/apidocs/* usr/share/doc/libtwelvemonkeys-java/api/ +lib/apidocs/* usr/share/doc/libtwelvemonkeys-java/api/ + diff --git a/debian/libtwelvemonkeys-java.poms b/debian/libtwelvemonkeys-java.poms new file mode 100644 index 0000000..d69c314 --- /dev/null +++ b/debian/libtwelvemonkeys-java.poms @@ -0,0 +1,55 @@ +# List of POM files for the package +# Format of this file is: +# <path to pom file> [option]* +# where option can be: +# --ignore: ignore this POM and its artifact if any +# --ignore-pom: don't install the POM. To use on POM files that are created +# temporarily for certain artifacts such as Javadoc jars. [mh_install, mh_installpoms] +# --no-parent: remove the <parent> tag from the POM +# --package=<package>: an alternative package to use when installing this POM +# and its artifact +# --has-package-version: to indicate that the original version of the POM is the same as the upstream part +# of the version for the package. +# --keep-elements=<elem1,elem2>: a list of XML elements to keep in the POM +# during a clean operation with mh_cleanpom or mh_installpom +# --artifact=<path>: path to the build artifact associated with this POM, +# it will be installed when using the command mh_install. [mh_install] +# --java-lib: install the jar into /usr/share/java to comply with Debian +# packaging guidelines +# --usj-name=<name>: name to use when installing the library in /usr/share/java +# --usj-version=<version>: version to use when installing the library in /usr/share/java +# --no-usj-versionless: don't install the versionless link in /usr/share/java +# --dest-jar=<path>: the destination for the real jar. +# It will be installed with mh_install. [mh_install] +# --classifier=<classifier>: Optional, the classifier for the jar. Empty by default. +# --site-xml=<location>: Optional, the location for site.xml if it needs to be installed. +# Empty by default. [mh_install] +# +pom.xml --no-parent --has-package-version +common/pom.xml --has-package-version +common/common-lang/pom.xml --has-package-version +common/common-io/pom.xml --has-package-version +common/common-image/pom.xml --has-package-version +servlet/pom.xml --has-package-version +imageio/pom.xml --has-package-version +imageio/imageio-core/pom.xml --has-package-version +imageio/imageio-metadata/pom.xml --has-package-version +imageio/imageio-clippath/pom.xml --has-package-version +imageio/imageio-bmp/pom.xml --has-package-version +imageio/imageio-hdr/pom.xml --has-package-version +imageio/imageio-icns/pom.xml --has-package-version +imageio/imageio-iff/pom.xml --has-package-version +imageio/imageio-jpeg/pom.xml --has-package-version +imageio/imageio-pcx/pom.xml --has-package-version +imageio/imageio-pdf/pom.xml --has-package-version +imageio/imageio-pict/pom.xml --has-package-version +imageio/imageio-pnm/pom.xml --has-package-version +imageio/imageio-psd/pom.xml --has-package-version +imageio/imageio-sgi/pom.xml --has-package-version +imageio/imageio-tga/pom.xml --has-package-version +imageio/imageio-thumbsdb/pom.xml --has-package-version +imageio/imageio-tiff/pom.xml --has-package-version +imageio/imageio-batik/pom.xml --has-package-version +imageio/imageio-reference/pom.xml --has-package-version +contrib/pom.xml --has-package-version +bom/pom.xml --has-package-version diff --git a/debian/maven.ignoreRules b/debian/maven.ignoreRules new file mode 100644 index 0000000..ce016b1 --- /dev/null +++ b/debian/maven.ignoreRules @@ -0,0 +1,9 @@ +* * test-jar * * * +jmagick jmagick * * * * +junit junit * * * * +org.apache.maven.plugins maven-checkstyle-plugin * * * * +org.apache.maven.plugins maven-pmd-plugin * * * * +org.apache.maven.plugins maven-source-plugin * * * * +org.apache.maven.plugins maven-surefire-report-plugin * * * * +org.codehaus.mojo cobertura-maven-plugin * * * * +org.mockito mockito-all * * * * diff --git a/debian/maven.properties b/debian/maven.properties new file mode 100644 index 0000000..be1360a --- /dev/null +++ b/debian/maven.properties @@ -0,0 +1,3 @@ +# Include here properties to pass to Maven during the build. +# For example: +maven.test.skip=true diff --git a/debian/maven.rules b/debian/maven.rules new file mode 100644 index 0000000..45d282d --- /dev/null +++ b/debian/maven.rules @@ -0,0 +1,32 @@ + +com.twelvemonkeys twelvemonkeys pom s/.*/debian/ * * +com.twelvemonkeys.bom bom pom s/.*/debian/ * * +com.twelvemonkeys.common common-image jar s/.*/debian/ * * +com.twelvemonkeys.common common-io jar s/.*/debian/ * * +com.twelvemonkeys.common common-lang jar s/.*/debian/ * * +com.twelvemonkeys.common common pom s/.*/debian/ * * +com.twelvemonkeys.contrib contrib jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-batik jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-bmp jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-clippath jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-core jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-hdr jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-icns jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-iff jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-jpeg jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-metadata jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-pcx jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-pdf jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-pict jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-pnm jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-psd jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-reference jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-sgi jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-tga jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-thumbsdb jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio-tiff jar s/.*/debian/ * * +com.twelvemonkeys.imageio imageio pom s/.*/debian/ * * +com.twelvemonkeys.servlet servlet jar s/.*/debian/ * * +log4j log4j * s/1\.2\..*/1.2.x/ * * +javax.servlet s/servlet-api/javax.servlet-api/ * s/.*/3.1/ * * +s/javax.servlet/javax.servlet.jsp/ s/jsp-api/javax.servlet.jsp-api/ * s/.*/2.3/ * * diff --git a/debian/patches/no-jmagick-and-imagemagick-support.patch b/debian/patches/no-jmagick-and-imagemagick-support.patch new file mode 100644 index 0000000..96c48ea --- /dev/null +++ b/debian/patches/no-jmagick-and-imagemagick-support.patch @@ -0,0 +1,872 @@ +From: Markus Koschany <[email protected]> +Date: Mon, 26 Jun 2017 23:47:56 +0200 +Subject: no jmagick and imagemagick support + +--- + .../main/java/com/twelvemonkeys/image/Magick.java | 24 - + .../com/twelvemonkeys/image/MagickAccelerator.java | 184 ------- + .../java/com/twelvemonkeys/image/MagickUtil.java | 611 --------------------- + .../java/com/twelvemonkeys/image/ResampleOp.java | 4 +- + 4 files changed, 2 insertions(+), 821 deletions(-) + delete mode 100755 common/common-image/src/main/java/com/twelvemonkeys/image/Magick.java + delete mode 100755 common/common-image/src/main/java/com/twelvemonkeys/image/MagickAccelerator.java + delete mode 100755 common/common-image/src/main/java/com/twelvemonkeys/image/MagickUtil.java + +diff --git a/common/common-image/src/main/java/com/twelvemonkeys/image/Magick.java b/common/common-image/src/main/java/com/twelvemonkeys/image/Magick.java +deleted file mode 100755 +index 48165b7..0000000 +--- a/common/common-image/src/main/java/com/twelvemonkeys/image/Magick.java ++++ /dev/null +@@ -1,24 +0,0 @@ +-package com.twelvemonkeys.image; +- +-/** +- * Magick +- * +- * @author <a href="mailto:[email protected]">Harald Kuhr</a> +- * @author last modified by $Author: haku $ +- * @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/image/Magick.java#1 $ +- */ +-final class Magick { +- static final boolean DEBUG = useDebug(); +- +- private static boolean useDebug() { +- try { +- return "TRUE".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.image.magick.debug")); +- } +- catch (Throwable t) { +- // Most probably in case of a SecurityManager +- return false; +- } +- } +- +- private Magick() {} +-} +diff --git a/common/common-image/src/main/java/com/twelvemonkeys/image/MagickAccelerator.java b/common/common-image/src/main/java/com/twelvemonkeys/image/MagickAccelerator.java +deleted file mode 100755 +index 681f285..0000000 +--- a/common/common-image/src/main/java/com/twelvemonkeys/image/MagickAccelerator.java ++++ /dev/null +@@ -1,184 +0,0 @@ +-package com.twelvemonkeys.image; +- +-/* +- * Copyright (c) 2008, 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 "TwelveMonkeys" 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 OWNER 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. +- */ +- +-import com.twelvemonkeys.lang.SystemUtil; +- +-import magick.MagickImage; +- +-import java.awt.image.*; +- +-/** +- * This class accelerates certain graphics operations, using +- * JMagick and ImageMagick, if available. +- * If those libraries are not installed, this class silently does nothing. +- * <p/> +- * Set the system property {@code "com.twelvemonkeys.image.accel"} to +- * {@code false}, to disable, even if JMagick is installed. +- * Set the system property {@code "com.twelvemonkeys.image.magick.debug"} to +- * <p/> +- * +- * @author <a href="mailto:[email protected]">Harald Kuhr</a> +- * @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/image/MagickAccelerator.java#3 $ +- */ +-final class MagickAccelerator { +- +- private static final boolean DEBUG = Magick.DEBUG; +- private static final boolean USE_MAGICK = useMagick(); +- +- private static final int RESAMPLE_OP = 0; +- +- private static Class[] nativeOp = new Class[1]; +- +- static { +- try { +- nativeOp[RESAMPLE_OP] = Class.forName("com.twelvemonkeys.image.ResampleOp"); +- } +- catch (ClassNotFoundException e) { +- System.err.println("Could not find class: " + e); +- } +- } +- +- private static boolean useMagick() { +- try { +- boolean available = SystemUtil.isClassAvailable("magick.MagickImage"); +- +- if (DEBUG && !available) { +- System.err.print("ImageMagick bindings not available."); +- } +- +- boolean useMagick = +- available && !"FALSE".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.image.accel")); +- +- if (DEBUG) { +- System.err.println( +- useMagick +- ? "Will use ImageMagick bindings to accelerate image resampling operations." +- : "Will not use ImageMagick to accelerate image resampling operations." +- ); +- } +- +- return useMagick; +- } +- catch (Throwable t) { +- // Most probably in case of a SecurityManager +- System.err.println("Could not enable ImageMagick bindings: " + t); +- return false; +- } +- } +- +- private static int getNativeOpIndex(Class pOpClass) { +- for (int i = 0; i < nativeOp.length; i++) { +- if (pOpClass == nativeOp[i]) { +- return i; +- } +- } +- +- return -1; +- } +- +- public static BufferedImage filter(BufferedImageOp pOperation, BufferedImage pInput, BufferedImage pOutput) { +- if (!USE_MAGICK) { +- return null; +- } +- +- BufferedImage result = null; +- switch (getNativeOpIndex(pOperation.getClass())) { +- case RESAMPLE_OP: +- ResampleOp resample = (ResampleOp) pOperation; +- result = resampleMagick(pInput, resample.width, resample.height, resample.filterType); +- +- // NOTE: If output parameter is non-null, we have to return that +- // image, instead of result +- if (pOutput != null) { +- //pOutput.setData(result.getRaster()); // Fast, but less compatible +- // NOTE: For some reason, this is sometimes super-slow...? +- ImageUtil.drawOnto(pOutput, result); +- result = pOutput; +- } +- +- break; +- +- default: +- // Simply fall through, allowing acceleration to be added later +- break; +- +- } +- +- return result; +- } +- +- private static BufferedImage resampleMagick(BufferedImage pSrc, int pWidth, int pHeight, int pFilterType) { +- // Convert to Magick, scale and convert back +- MagickImage image = null; +- MagickImage scaled = null; +- try { +- image = MagickUtil.toMagick(pSrc); +- +- long start = 0; +- if (DEBUG) { +- start = System.currentTimeMillis(); +- } +- +- // NOTE: setFilter affects zoomImage, NOT scaleImage +- image.setFilter(pFilterType); +- scaled = image.zoomImage(pWidth, pHeight); +- //scaled = image.scaleImage(pWidth, pHeight); // AREA_AVERAGING +- +- if (DEBUG) { +- long time = System.currentTimeMillis() - start; +- System.out.println("Filtered: " + time + " ms"); +- } +- +- return MagickUtil.toBuffered(scaled); +- } +- //catch (MagickException e) { +- catch (Exception e) { +- // NOTE: Stupid workaround: If MagickException is caught, a +- // NoClassDefFoundError is thrown, when MagickException class is +- // unavailable... +- if (e instanceof RuntimeException) { +- throw (RuntimeException) e; +- } +- +- throw new ImageConversionException(e.getMessage(), e); +- } +- finally { +- // NOTE: ImageMagick might be unstable after a while, if image data +- // is not deallocated. The GC/finalize method handles this, but in +- // special circumstances, it's not triggered often enough. +- if (image != null) { +- image.destroyImages(); +- } +- if (scaled != null) { +- scaled.destroyImages(); +- } +- } +- } +-} +\ No newline at end of file +diff --git a/common/common-image/src/main/java/com/twelvemonkeys/image/MagickUtil.java b/common/common-image/src/main/java/com/twelvemonkeys/image/MagickUtil.java +deleted file mode 100755 +index 8f648de..0000000 +--- a/common/common-image/src/main/java/com/twelvemonkeys/image/MagickUtil.java ++++ /dev/null +@@ -1,611 +0,0 @@ +-/* +- * Copyright (c) 2008, 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 "TwelveMonkeys" 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 OWNER 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.image; +- +-import magick.*; +- +-import java.awt.*; +-import java.awt.color.ColorSpace; +-import java.awt.color.ICC_ColorSpace; +-import java.awt.color.ICC_Profile; +-import java.awt.image.*; +- +-/** +- * Utility for converting JMagick {@code MagickImage}s to standard Java +- * {@code BufferedImage}s and back. +- * <p/> +- * <em>NOTE: This class is considered an implementation detail and not part of +- * the public API. This class is subject to change without further notice. +- * You have been warned. :-)</em> +- * +- * @author <a href="mailto:[email protected]">Harald Kuhr</a> +- * @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/image/MagickUtil.java#4 $ +- */ +-public final class MagickUtil { +- // IMPORTANT NOTE: Disaster happens if any of these constants are used outside this class +- // because you then have a dependency on MagickException (this is due to Java class loading +- // and initialization magic). +- // Do not use outside this class. If the constants need to be shared, move to Magick or ImageUtil. +- +- /** Color Model usesd for bilevel (B/W) */ +- private static final IndexColorModel CM_MONOCHROME = MonochromeColorModel.getInstance(); +- +- /** Color Model usesd for raw ABGR */ +- private static final ColorModel CM_COLOR_ALPHA = +- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[] {8, 8, 8, 8}, +- true, true, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); +- +- /** Color Model usesd for raw BGR */ +- private static final ColorModel CM_COLOR_OPAQUE = +- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[] {8, 8, 8}, +- false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); +- +- /** Color Model usesd for raw RGB */ +- //private static final ColorModel CM_COLOR_RGB = new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x0); +- +- /** Color Model usesd for raw GRAY + ALPHA */ +- private static final ColorModel CM_GRAY_ALPHA = +- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), +- true, true, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); +- +- /** Color Model usesd for raw GRAY */ +- private static final ColorModel CM_GRAY_OPAQUE = +- new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), +- false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); +- +- /** Band offsets for raw ABGR */ +- private static final int[] BAND_OFF_TRANS = new int[] {3, 2, 1, 0}; +- +- /** Band offsets for raw BGR */ +- private static final int[] BAND_OFF_OPAQUE = new int[] {2, 1, 0}; +- +- /** The point at {@code 0, 0} */ +- private static final Point LOCATION_UPPER_LEFT = new Point(0, 0); +- +- private static final boolean DEBUG = Magick.DEBUG; +- +- // Only static members and methods +- private MagickUtil() {} +- +- /** +- * Converts a {@code MagickImage} to a {@code BufferedImage}. +- * <p/> +- * The conversion depends on {@code pImage}'s {@code ImageType}: +- * <dl> +- * <dt>{@code ImageType.BilevelType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_BYTE_BINARY}</dd> +- * +- * <dt>{@code ImageType.GrayscaleType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_BYTE_GRAY}</dd> +- * <dt>{@code ImageType.GrayscaleMatteType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_USHORT_GRAY}</dd> +- * +- * <dt>{@code ImageType.PaletteType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_BYTE_BINARY} (for images +- * with a palette of <= 16 colors) or {@code TYPE_BYTE_INDEXED}</dd> +- * <dt>{@code ImageType.PaletteMatteType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_BYTE_BINARY} (for images +- * with a palette of <= 16 colors) or {@code TYPE_BYTE_INDEXED}</dd> +- * +- * <dt>{@code ImageType.TrueColorType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_3BYTE_BGR}</dd> +- * <dt>{@code ImageType.TrueColorPaletteType}</dt> +- * <dd>{@code BufferedImage} of type {@code TYPE_4BYTE_ABGR}</dd> +- * +- * @param pImage the original {@code MagickImage} +- * @return a new {@code BufferedImage} +- * +- * @throws IllegalArgumentException if {@code pImage} is {@code null} +- * or if the {@code ImageType} is not one mentioned above. +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- public static BufferedImage toBuffered(MagickImage pImage) throws MagickException { +- if (pImage == null) { +- throw new IllegalArgumentException("image == null"); +- } +- +- long start = 0L; +- if (DEBUG) { +- start = System.currentTimeMillis(); +- } +- +- BufferedImage image = null; +- try { +- switch (pImage.getImageType()) { +- case ImageType.BilevelType: +- image = bilevelToBuffered(pImage); +- break; +- case ImageType.GrayscaleType: +- image = grayToBuffered(pImage, false); +- break; +- case ImageType.GrayscaleMatteType: +- image = grayToBuffered(pImage, true); +- break; +- case ImageType.PaletteType: +- image = paletteToBuffered(pImage, false); +- break; +- case ImageType.PaletteMatteType: +- image = paletteToBuffered(pImage, true); +- break; +- case ImageType.TrueColorType: +- image = rgbToBuffered(pImage, false); +- break; +- case ImageType.TrueColorMatteType: +- image = rgbToBuffered(pImage, true); +- break; +- case ImageType.ColorSeparationType: +- image = cmykToBuffered(pImage, false); +- break; +- case ImageType.ColorSeparationMatteType: +- image = cmykToBuffered(pImage, true); +- break; +- case ImageType.OptimizeType: +- default: +- throw new IllegalArgumentException("Unknown JMagick image type: " + pImage.getImageType()); +- } +- +- } +- finally { +- if (DEBUG) { +- long time = System.currentTimeMillis() - start; +- System.out.println("Converted JMagick image type: " + pImage.getImageType() + " to BufferedImage: " + image); +- System.out.println("Conversion to BufferedImage: " + time + " ms"); +- } +- } +- +- return image; +- } +- +- /** +- * Converts a {@code BufferedImage} to a {@code MagickImage}. +- * <p/> +- * The conversion depends on {@code pImage}'s {@code ColorModel}: +- * <dl> +- * <dt>{@code IndexColorModel} with 1 bit b/w</dt> +- * <dd>{@code MagickImage} of type {@code ImageType.BilevelType}</dd> +- * <dt>{@code IndexColorModel} > 1 bit,</dt> +- * <dd>{@code MagickImage} of type {@code ImageType.PaletteType} +- * or {@code MagickImage} of type {@code ImageType.PaletteMatteType} +- * depending on <tt>ColorModel.getAlpha()</dd> +- * +- * <dt>{@code ColorModel.getColorSpace().getType() == ColorSpace.TYPE_GRAY}</dt> +- * <dd>{@code MagickImage} of type {@code ImageType.GrayscaleType} +- * or {@code MagickImage} of type {@code ImageType.GrayscaleMatteType} +- * depending on <tt>ColorModel.getAlpha()</dd> +- * +- * <dt>{@code ColorModel.getColorSpace().getType() == ColorSpace.TYPE_RGB}</dt> +- * <dd>{@code MagickImage} of type {@code ImageType.TrueColorType} +- * or {@code MagickImage} of type {@code ImageType.TrueColorPaletteType}</dd> +- * +- * @param pImage the original {@code BufferedImage} +- * @return a new {@code MagickImage} +- * +- * @throws IllegalArgumentException if {@code pImage} is {@code null} +- * or if the {@code ColorModel} is not one mentioned above. +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- public static MagickImage toMagick(BufferedImage pImage) throws MagickException { +- if (pImage == null) { +- throw new IllegalArgumentException("image == null"); +- } +- +- long start = 0L; +- if (DEBUG) { +- start = System.currentTimeMillis(); +- } +- +- try { +- ColorModel cm = pImage.getColorModel(); +- if (cm instanceof IndexColorModel) { +- // Handles both BilevelType, PaletteType and PaletteMatteType +- return indexedToMagick(pImage, (IndexColorModel) cm, cm.hasAlpha()); +- } +- +- switch (cm.getColorSpace().getType()) { +- case ColorSpace.TYPE_GRAY: +- // Handles GrayType and GrayMatteType +- return grayToMagick(pImage, cm.hasAlpha()); +- case ColorSpace.TYPE_RGB: +- // Handles TrueColorType and TrueColorMatteType +- return rgbToMagic(pImage, cm.hasAlpha()); +- case ColorSpace.TYPE_CMY: +- case ColorSpace.TYPE_CMYK: +- case ColorSpace.TYPE_HLS: +- case ColorSpace.TYPE_HSV: +- // Other types not supported yet +- default: +- throw new IllegalArgumentException("Unknown buffered image type: " + pImage); +- } +- } +- finally { +- if (DEBUG) { +- long time = System.currentTimeMillis() - start; +- System.out.println("Conversion to MagickImage: " + time + " ms"); +- } +- } +- } +- +- private static MagickImage rgbToMagic(BufferedImage pImage, boolean pAlpha) throws MagickException { +- MagickImage image = new MagickImage(); +- +- BufferedImage buffered = ImageUtil.toBuffered(pImage, pAlpha ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_3BYTE_BGR); +- +- // Need to get data of sub raster, not the full data array, this is +- // just a convenient way +- Raster raster; +- if (buffered.getRaster().getParent() != null) { +- raster = buffered.getData(new Rectangle(buffered.getWidth(), buffered.getHeight())); +- } +- else { +- raster = buffered.getRaster(); +- } +- +- image.constituteImage(buffered.getWidth(), buffered.getHeight(), pAlpha ? "ABGR" : "BGR", +- ((DataBufferByte) raster.getDataBuffer()).getData()); +- +- return image; +- } +- +- private static MagickImage grayToMagick(BufferedImage pImage, boolean pAlpha) throws MagickException { +- MagickImage image = new MagickImage(); +- +- // TODO: Make a fix for TYPE_USHORT_GRAY +- // The code below does not seem to work (JMagick issues?)... +- /* +- if (pImage.getType() == BufferedImage.TYPE_USHORT_GRAY) { +- short[] data = ((DataBufferUShort) pImage.getRaster().getDataBuffer()).getData(); +- int[] intData = new int[data.length]; +- for (int i = 0; i < data.length; i++) { +- intData[i] = (data[i] & 0xffff) * 0xffff; +- } +- image.constituteImage(pImage.getWidth(), pImage.getHeight(), "I", intData); +- +- System.out.println("storageClass: " + image.getStorageClass()); +- System.out.println("depth: " + image.getDepth()); +- System.out.println("imageType: " + image.getImageType()); +- } +- else { +- */ +- BufferedImage buffered = ImageUtil.toBuffered(pImage, pAlpha ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_BYTE_GRAY); +- +- // Need to get data of sub raster, not the full data array, this is +- // just a convenient way +- Raster raster; +- if (buffered.getRaster().getParent() != null) { +- raster = buffered.getData(new Rectangle(buffered.getWidth(), buffered.getHeight())); +- } +- else { +- raster = buffered.getRaster(); +- } +- +- image.constituteImage(buffered.getWidth(), buffered.getHeight(), pAlpha ? "ABGR" : "I", ((DataBufferByte) raster.getDataBuffer()).getData()); +- //} +- +- return image; +- } +- +- private static MagickImage indexedToMagick(BufferedImage pImage, IndexColorModel pColorModel, boolean pAlpha) throws MagickException { +- MagickImage image = rgbToMagic(pImage, pAlpha); +- +- int mapSize = pColorModel.getMapSize(); +- image.setNumberColors(mapSize); +- +- return image; +- } +- +- /* +- public static MagickImage toMagick(BufferedImage pImage) throws MagickException { +- if (pImage == null) { +- throw new IllegalArgumentException("image == null"); +- } +- +- final int width = pImage.getWidth(); +- final int height = pImage.getHeight(); +- +- // int ARGB -> byte RGBA conversion +- // NOTE: This is ImageMagick Q16 compatible raw RGBA format with 16 bits/sample... +- // For a Q8 build, we could probably go with half the space... +- // NOTE: This is close to insanity, as it wastes extreme ammounts of memory +- final int[] argb = new int[width]; +- final byte[] raw16 = new byte[width * height * 8]; +- for (int y = 0; y < height; y++) { +- // Fetch one line of ARGB data +- pImage.getRGB(0, y, width, 1, argb, 0, width); +- +- for (int x = 0; x < width; x++) { +- int pixel = (x + (y * width)) * 8; +- raw16[pixel ] = (byte) ((argb[x] >> 16) & 0xff); // R +- raw16[pixel + 2] = (byte) ((argb[x] >> 8) & 0xff); // G +- raw16[pixel + 4] = (byte) ((argb[x] ) & 0xff); // B +- raw16[pixel + 6] = (byte) ((argb[x] >> 24) & 0xff); // A +- } +- } +- +- // Create magick image +- ImageInfo info = new ImageInfo(); +- info.setMagick("RGBA"); // Raw RGBA samples +- info.setSize(width + "x" + height); // String?!? +- +- MagickImage image = new MagickImage(info); +- image.setImageAttribute("depth", "8"); +- +- // Set pixel data in 16 bit raw RGBA format +- image.blobToImage(info, raw16); +- +- return image; +- } +- */ +- +- /** +- * Converts a bi-level {@code MagickImage} to a {@code BufferedImage}, of +- * type {@code TYPE_BYTE_BINARY}. +- * +- * @param pImage the original {@code MagickImage} +- * @return a new {@code BufferedImage} +- * +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- private static BufferedImage bilevelToBuffered(MagickImage pImage) throws MagickException { +- // As there is no way to get the binary representation of the image, +- // convert to gray, and the create a binary image from it +- BufferedImage temp = grayToBuffered(pImage, false); +- +- BufferedImage image = new BufferedImage(temp.getWidth(), temp.getHeight(), BufferedImage.TYPE_BYTE_BINARY, CM_MONOCHROME); +- +- ImageUtil.drawOnto(image, temp); +- +- return image; +- } +- +- /** +- * Converts a gray {@code MagickImage} to a {@code BufferedImage}, of +- * type {@code TYPE_USHORT_GRAY} or {@code TYPE_BYTE_GRAY}. +- * +- * @param pImage the original {@code MagickImage} +- * @param pAlpha keep alpha channel +- * @return a new {@code BufferedImage} +- * +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- private static BufferedImage grayToBuffered(MagickImage pImage, boolean pAlpha) throws MagickException { +- Dimension size = pImage.getDimension(); +- int length = size.width * size.height; +- int bands = pAlpha ? 2 : 1; +- byte[] pixels = new byte[length * bands]; +- +- // TODO: Make a fix for 16 bit TYPE_USHORT_GRAY?! +- // Note: The ordering AI or I corresponds to BufferedImage +- // TYPE_CUSTOM and TYPE_BYTE_GRAY respectively +- pImage.dispatchImage(0, 0, size.width, size.height, pAlpha ? "AI" : "I", pixels); +- +- // Init databuffer with array, to avoid allocation of empty array +- DataBuffer buffer = new DataBufferByte(pixels, pixels.length); +- +- int[] bandOffsets = pAlpha ? new int[] {1, 0} : new int[] {0}; +- +- WritableRaster raster = +- Raster.createInterleavedRaster(buffer, size.width, size.height, +- size.width * bands, bands, bandOffsets, LOCATION_UPPER_LEFT); +- +- return new BufferedImage(pAlpha ? CM_GRAY_ALPHA : CM_GRAY_OPAQUE, raster, pAlpha, null); +- } +- +- /** +- * Converts a palette-based {@code MagickImage} to a +- * {@code BufferedImage}, of type {@code TYPE_BYTE_BINARY} (for images +- * with a palette of <= 16 colors) or {@code TYPE_BYTE_INDEXED}. +- * +- * @param pImage the original {@code MagickImage} +- * @param pAlpha keep alpha channel +- * @return a new {@code BufferedImage} +- * +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- private static BufferedImage paletteToBuffered(MagickImage pImage, boolean pAlpha) throws MagickException { +- // Create indexcolormodel for the image +- IndexColorModel cm; +- +- try { +- cm = createIndexColorModel(pImage.getColormap(), pAlpha); +- } +- catch (MagickException e) { +- // NOTE: Some MagickImages incorrecly (?) reports to be paletteType, +- // but does not have a colormap, this is a workaround. +- return rgbToBuffered(pImage, pAlpha); +- } +- +- // As there is no way to get the indexes of an indexed image, convert to +- // RGB, and the create an indexed image from it +- BufferedImage temp = rgbToBuffered(pImage, pAlpha); +- +- BufferedImage image; +- if (cm.getMapSize() <= 16) { +- image = new BufferedImage(temp.getWidth(), temp.getHeight(), BufferedImage.TYPE_BYTE_BINARY, cm); +- } +- else { +- image = new BufferedImage(temp.getWidth(), temp.getHeight(), BufferedImage.TYPE_BYTE_INDEXED, cm); +- } +- +- // Create transparent background for images containing alpha +- if (pAlpha) { +- Graphics2D g = image.createGraphics(); +- try { +- g.setComposite(AlphaComposite.Clear); +- g.fillRect(0, 0, temp.getWidth(), temp.getHeight()); +- } +- finally { +- g.dispose(); +- } +- } +- +- // NOTE: This is (surprisingly) much faster than using g2d.drawImage().. +- // (Tests shows 20-30ms, vs. 600-700ms on the same image) +- BufferedImageOp op = new CopyDither(cm); +- op.filter(temp, image); +- +- return image; +- } +- +- /** +- * Creates an {@code IndexColorModel} from an array of +- * {@code PixelPacket}s. +- * +- * @param pColormap the original colormap as a {@code PixelPacket} array +- * @param pAlpha keep alpha channel +- * +- * @return a new {@code IndexColorModel} +- */ +- public static IndexColorModel createIndexColorModel(PixelPacket[] pColormap, boolean pAlpha) { +- int[] colors = new int[pColormap.length]; +- +- // TODO: Verify if this is correct for alpha...? +- int trans = pAlpha ? colors.length - 1 : -1; +- +- //for (int i = 0; i < pColormap.length; i++) { +- for (int i = pColormap.length - 1; i != 0; i--) { +- PixelPacket color = pColormap[i]; +- if (pAlpha) { +- colors[i] = (0xff - (color.getOpacity() & 0xff)) << 24 | +- (color.getRed() & 0xff) << 16 | +- (color.getGreen() & 0xff) << 8 | +- (color.getBlue() & 0xff); +- } +- else { +- colors[i] = (color.getRed() & 0xff) << 16 | +- (color.getGreen() & 0xff) << 8 | +- (color.getBlue() & 0xff); +- } +- } +- +- return new InverseColorMapIndexColorModel(8, colors.length, colors, 0, pAlpha, trans, DataBuffer.TYPE_BYTE); +- } +- +- /** +- * Converts an (A)RGB {@code MagickImage} to a {@code BufferedImage}, of +- * type {@code TYPE_4BYTE_ABGR} or {@code TYPE_3BYTE_BGR}. +- * +- * @param pImage the original {@code MagickImage} +- * @param pAlpha keep alpha channel +- * @return a new {@code BufferedImage} +- * +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- private static BufferedImage rgbToBuffered(MagickImage pImage, boolean pAlpha) throws MagickException { +- Dimension size = pImage.getDimension(); +- int length = size.width * size.height; +- int bands = pAlpha ? 4 : 3; +- byte[] pixels = new byte[length * bands]; +- +- // TODO: If we do multiple dispatches (one per line, typically), we could provide listener +- // feedback. But it's currently a lot slower than fetching all the pixels in one go. +- +- // Note: The ordering ABGR or BGR corresponds to BufferedImage +- // TYPE_4BYTE_ABGR and TYPE_3BYTE_BGR respectively +- pImage.dispatchImage(0, 0, size.width, size.height, pAlpha ? "ABGR" : "BGR", pixels); +- +- // Init databuffer with array, to avoid allocation of empty array +- DataBuffer buffer = new DataBufferByte(pixels, pixels.length); +- +- int[] bandOffsets = pAlpha ? BAND_OFF_TRANS : BAND_OFF_OPAQUE; +- +- WritableRaster raster = +- Raster.createInterleavedRaster(buffer, size.width, size.height, +- size.width * bands, bands, bandOffsets, LOCATION_UPPER_LEFT); +- +- return new BufferedImage(pAlpha ? CM_COLOR_ALPHA : CM_COLOR_OPAQUE, raster, pAlpha, null); +- } +- +- +- +- +- /** +- * Converts an {@code MagickImage} to a {@code BufferedImage} which holds an CMYK ICC profile +- * +- * @param pImage the original {@code MagickImage} +- * @param pAlpha keep alpha channel +- * @return a new {@code BufferedImage} +- * +- * @throws MagickException if an exception occurs during conversion +- * +- * @see BufferedImage +- */ +- private static BufferedImage cmykToBuffered(MagickImage pImage, boolean pAlpha) throws MagickException { +- Dimension size = pImage.getDimension(); +- int length = size.width * size.height; +- +- // Retreive the ICC profile +- ICC_Profile profile = ICC_Profile.getInstance(pImage.getColorProfile().getInfo()); +- ColorSpace cs = new ICC_ColorSpace(profile); +- +- int bands = cs.getNumComponents() + (pAlpha ? 1 : 0); +- +- int[] bits = new int[bands]; +- for (int i = 0; i < bands; i++) { +- bits[i] = 8; +- } +- +- ColorModel cm = pAlpha ? +- new ComponentColorModel(cs, bits, true, true, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE) : +- new ComponentColorModel(cs, bits, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); +- +- byte[] pixels = new byte[length * bands]; +- +- // TODO: If we do multiple dispatches (one per line, typically), we could provide listener +- // feedback. But it's currently a lot slower than fetching all the pixels in one go. +- // TODO: handle more generic cases if profile is not CMYK +- // TODO: Test "ACMYK" +- pImage.dispatchImage(0, 0, size.width, size.height, pAlpha ? "ACMYK" : "CMYK", pixels); +- +- // Init databuffer with array, to avoid allocation of empty array +- DataBuffer buffer = new DataBufferByte(pixels, pixels.length); +- +- // TODO: build array from bands variable, here it just works for CMYK +- // The values has not been tested with an alpha picture actually... +- int[] bandOffsets = pAlpha ? new int[] {0, 1, 2, 3, 4} : new int[] {0, 1, 2, 3}; +- +- WritableRaster raster = +- Raster.createInterleavedRaster(buffer, size.width, size.height, +- size.width * bands, bands, bandOffsets, LOCATION_UPPER_LEFT); +- +- return new BufferedImage(cm, raster, pAlpha, null); +- +- } +-} +diff --git a/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java b/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java +index 73cc9cc..8bfc341 100644 +--- a/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java ++++ b/common/common-image/src/main/java/com/twelvemonkeys/image/ResampleOp.java +@@ -538,7 +538,7 @@ public class ResampleOp implements BufferedImageOp/* TODO: RasterOp */ { + } + + // Try to use native ImageMagick code +- BufferedImage result = MagickAccelerator.filter(this, input, output); ++ BufferedImage result = null; + if (result != null) { + return result; + } +@@ -1626,4 +1626,4 @@ public class ResampleOp implements BufferedImageOp/* TODO: RasterOp */ { + }/* next dst column */ + return pDest; + }/* resample */ +-} +\ No newline at end of file ++} diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..0b5bf19 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,3 @@ +no-jmagick-and-imagemagick-support.patch +use-local-jars.patch +servlet3.1.patch diff --git a/debian/patches/servlet3.1.patch b/debian/patches/servlet3.1.patch new file mode 100644 index 0000000..cf707c9 --- /dev/null +++ b/debian/patches/servlet3.1.patch @@ -0,0 +1,35 @@ +From: Markus Koschany <[email protected]> +Date: Tue, 27 Jun 2017 00:26:50 +0200 +Subject: servlet3.1 + +--- + .../java/com/twelvemonkeys/servlet/OutputStreamAdapter.java | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/servlet/src/main/java/com/twelvemonkeys/servlet/OutputStreamAdapter.java b/servlet/src/main/java/com/twelvemonkeys/servlet/OutputStreamAdapter.java +index d3316f0..f4ce633 100755 +--- a/servlet/src/main/java/com/twelvemonkeys/servlet/OutputStreamAdapter.java ++++ b/servlet/src/main/java/com/twelvemonkeys/servlet/OutputStreamAdapter.java +@@ -31,6 +31,7 @@ package com.twelvemonkeys.servlet; + import com.twelvemonkeys.lang.Validate; + + import javax.servlet.ServletOutputStream; ++import javax.servlet.WriteListener; + import java.io.IOException; + import java.io.OutputStream; + +@@ -117,4 +118,14 @@ public class OutputStreamAdapter extends ServletOutputStream { + public void write(final byte pBytes[], final int pOff, final int pLen) throws IOException { + out.write(pBytes, pOff, pLen); + } ++ ++ @Override ++ public void setWriteListener(WriteListener writeListener) { ++ throw new UnsupportedOperationException(); ++ } ++ ++ @Override ++ public boolean isReady() { ++ throw new UnsupportedOperationException(); ++ } + } diff --git a/debian/patches/use-local-jars.patch b/debian/patches/use-local-jars.patch new file mode 100644 index 0000000..145eeba --- /dev/null +++ b/debian/patches/use-local-jars.patch @@ -0,0 +1,57 @@ +From: Markus Koschany <[email protected]> +Date: Sun, 25 Jun 2017 00:24:24 +0200 +Subject: use local jars + +--- + common/common-image/pom.xml | 4 ++++ + common/common-io/pom.xml | 3 ++- + pom.xml | 1 + + 3 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/common/common-image/pom.xml b/common/common-image/pom.xml +index ef807bb..bef7cf8 100644 +--- a/common/common-image/pom.xml ++++ b/common/common-image/pom.xml +@@ -17,11 +17,15 @@ + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>common-lang</artifactId> ++ <scope>system</scope> ++ <systemPath>${user.dir}/lib/twelvemonkeys-common-lang-3.3.2.jar</systemPath> + </dependency> + + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>common-io</artifactId> ++ <scope>system</scope> ++ <systemPath>${user.dir}/lib/twelvemonkeys-common-io-3.3.2.jar</systemPath> + </dependency> + + <dependency> +diff --git a/common/common-io/pom.xml b/common/common-io/pom.xml +index 511a045..9fc0af8 100644 +--- a/common/common-io/pom.xml ++++ b/common/common-io/pom.xml +@@ -17,8 +17,9 @@ + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>common-lang</artifactId> ++ <scope>system</scope> ++ <systemPath>${user.dir}/lib/twelvemonkeys-common-lang-3.3.2.jar</systemPath> + </dependency> +- + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>common-lang</artifactId> +diff --git a/pom.xml b/pom.xml +index 1a27c5b..c56bea2 100755 +--- a/pom.xml ++++ b/pom.xml +@@ -91,6 +91,7 @@ + </properties> + + <build> ++ <directory>${user.dir}/lib</directory> + <finalName>twelvemonkeys-${project.artifactId}-${project.version}</finalName> + <plugins> + <plugin> diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..08c86ca --- /dev/null +++ b/debian/rules @@ -0,0 +1,10 @@ +#!/usr/bin/make -f + +%: + dh $@ + +override_dh_auto_test: + # Do nothing here + +get-orig-source: + uscan --download-current-version --force-download --repack --compression xz diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..d4379e9 --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +https://github.com/haraldk/TwelveMonkeys/tags .*/(?:.*?)([\d\.]+)\.tar\.gz -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libtwelvemonkeys-java.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

