You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Joakim Knudsen (JIRA)" <ji...@apache.org> on 2017/11/30 20:44:00 UTC

[jira] [Updated] (IMAGING-208) Android version of Commons Imaging

     [ https://issues.apache.org/jira/browse/IMAGING-208?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Joakim Knudsen updated IMAGING-208:
-----------------------------------
    Description: 
Effort has been made with Sanselan, to make an [Android compatible version of the library (Sanselan-Android)|https://github.com/fulcrumapp/sanselan-android]. Running the library as-is (either Sanselan 0.97 or Commons Imaging) on Android produces warnings and errors due to the lack of support of java.awt.

Exploring the code, comparing with the original Sanselan code (and Commons Imaging), I find that Sanselan-Android essentially comments out all references (imports etc) to {{java.awt.*}} -- typically {{java.awt.Dimension}}, {{java.awt.BufferedImage}}, and {{java.awt.color.ICC_ColorSpace}}.

As such, Sanselan-Android only supports JPEG and TIFF (snip from {{ImageParser.java}}, note the parts commented out):
{code:java}
package org.apache.sanselan;

//import java.awt.Dimension;
//import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;

import org.apache.sanselan.common.BinaryFileParser;
import org.apache.sanselan.common.IImageMetadata;
import org.apache.sanselan.common.byteSources.ByteSource;
import org.apache.sanselan.common.byteSources.ByteSourceArray;
import org.apache.sanselan.common.byteSources.ByteSourceFile;
//import org.apache.sanselan.formats.bmp.BmpImageParser;
//import org.apache.sanselan.formats.gif.GifImageParser;
//import org.apache.sanselan.formats.ico.IcoImageParser;
import org.apache.sanselan.formats.jpeg.JpegImageParser;
//import org.apache.sanselan.formats.png.PngImageParser;
//import org.apache.sanselan.formats.pnm.PNMImageParser;
//import org.apache.sanselan.formats.psd.PsdImageParser;
import org.apache.sanselan.formats.tiff.TiffImageParser;

public abstract class ImageParser extends BinaryFileParser implements
		SanselanConstants
{

	public static final ImageParser[] getAllImageParsers()
	{
		ImageParser result[] = { new JpegImageParser(), new TiffImageParser(),
//				new PngImageParser() 
//				new BmpImageParser(),
//				new GifImageParser(), new PsdImageParser(),
//				new PNMImageParser(), new IcoImageParser(),
		// new JBig2ImageParser(),
		// new TgaImageParser(),
		};

		return result;
	}
{code}

*It has been proposed to make an Android compatible version of Commons Imaging, and I'd like to propose this work to be started :) I'd also like to contribute as much as I can, but I'm not confident enough to be the main resource in such a task.*

It seems to me that simply commenting out all references and usage of, say, {{java.awt.Dimension}} is a unneccesarily crude fix, as this class appears to me to be a simple (?) wrapper class of two dimensions (height and width)? Why not replace this with something compatible with Android, and thus preserve functionality? [This StackOverflow post|https://stackoverflow.com/questions/8876130/class-dimension-for-java-on-android] discusses writing an equivalent class, or, alternatively, using [{{Point}}|https://developer.android.com/reference/android/graphics/Point.html].

  was:
Effort has been made with Sanselan, to make an [Android compatible version of the library (Sanselan-Android)|https://github.com/fulcrumapp/sanselan-android]. Running the library as-is (either Sanselan 0.97 or Commons Imaging) on Android produces warnings and errors due to the lack of support of java.awt.

Exploring the code, comparing with the original Sanselan code (and Commons Imaging), I find that Sanselan-Android essentially comments out all references (imports etc) to {{java.awt.*}} -- typically {{java.awt.Dimension}}, {{java.awt.BufferedImage}}, and {{java.awt.color.ICC_ColorSpace}}.

As such, Sanselan-Android only supports JPEG and TIFF (snip from {{ImageParser.java}}, note parts commented out):
{code:java}
package org.apache.sanselan;

//import java.awt.Dimension;
//import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;

import org.apache.sanselan.common.BinaryFileParser;
import org.apache.sanselan.common.IImageMetadata;
import org.apache.sanselan.common.byteSources.ByteSource;
import org.apache.sanselan.common.byteSources.ByteSourceArray;
import org.apache.sanselan.common.byteSources.ByteSourceFile;
//import org.apache.sanselan.formats.bmp.BmpImageParser;
//import org.apache.sanselan.formats.gif.GifImageParser;
//import org.apache.sanselan.formats.ico.IcoImageParser;
import org.apache.sanselan.formats.jpeg.JpegImageParser;
//import org.apache.sanselan.formats.png.PngImageParser;
//import org.apache.sanselan.formats.pnm.PNMImageParser;
//import org.apache.sanselan.formats.psd.PsdImageParser;
import org.apache.sanselan.formats.tiff.TiffImageParser;

public abstract class ImageParser extends BinaryFileParser implements
		SanselanConstants
{

	public static final ImageParser[] getAllImageParsers()
	{
		ImageParser result[] = { new JpegImageParser(), new TiffImageParser(),
//				new PngImageParser() 
//				new BmpImageParser(),
//				new GifImageParser(), new PsdImageParser(),
//				new PNMImageParser(), new IcoImageParser(),
		// new JBig2ImageParser(),
		// new TgaImageParser(),
		};

		return result;
	}
{code}

*It has been proposed to make an Android compatible version of Commons Imaging, and I'd like to propose this work to be started :) I'd also like to contribute as much as I can, but I'm not confident enough to be the main resource in such a task.*

It seems to me that simply commenting out all references and usage of, say, {{java.awt.Dimension}} is a unneccesarily crude fix, as this class appears to me to be a simple (?) wrapper class of two dimensions (height and width)? Why not replace this with something compatible with Android, and thus preserve functionality? [This StackOverflow post|https://stackoverflow.com/questions/8876130/class-dimension-for-java-on-android] discusses writing an equivalent class, or, alternatively, using [{{Point}}|https://developer.android.com/reference/android/graphics/Point.html].


> Android version of Commons Imaging
> ----------------------------------
>
>                 Key: IMAGING-208
>                 URL: https://issues.apache.org/jira/browse/IMAGING-208
>             Project: Commons Imaging
>          Issue Type: New Feature
>            Reporter: Joakim Knudsen
>            Priority: Minor
>
> Effort has been made with Sanselan, to make an [Android compatible version of the library (Sanselan-Android)|https://github.com/fulcrumapp/sanselan-android]. Running the library as-is (either Sanselan 0.97 or Commons Imaging) on Android produces warnings and errors due to the lack of support of java.awt.
> Exploring the code, comparing with the original Sanselan code (and Commons Imaging), I find that Sanselan-Android essentially comments out all references (imports etc) to {{java.awt.*}} -- typically {{java.awt.Dimension}}, {{java.awt.BufferedImage}}, and {{java.awt.color.ICC_ColorSpace}}.
> As such, Sanselan-Android only supports JPEG and TIFF (snip from {{ImageParser.java}}, note the parts commented out):
> {code:java}
> package org.apache.sanselan;
> //import java.awt.Dimension;
> //import java.awt.image.BufferedImage;
> import java.io.File;
> import java.io.IOException;
> import java.io.PrintWriter;
> import java.io.StringWriter;
> import java.util.Map;
> import org.apache.sanselan.common.BinaryFileParser;
> import org.apache.sanselan.common.IImageMetadata;
> import org.apache.sanselan.common.byteSources.ByteSource;
> import org.apache.sanselan.common.byteSources.ByteSourceArray;
> import org.apache.sanselan.common.byteSources.ByteSourceFile;
> //import org.apache.sanselan.formats.bmp.BmpImageParser;
> //import org.apache.sanselan.formats.gif.GifImageParser;
> //import org.apache.sanselan.formats.ico.IcoImageParser;
> import org.apache.sanselan.formats.jpeg.JpegImageParser;
> //import org.apache.sanselan.formats.png.PngImageParser;
> //import org.apache.sanselan.formats.pnm.PNMImageParser;
> //import org.apache.sanselan.formats.psd.PsdImageParser;
> import org.apache.sanselan.formats.tiff.TiffImageParser;
> public abstract class ImageParser extends BinaryFileParser implements
> 		SanselanConstants
> {
> 	public static final ImageParser[] getAllImageParsers()
> 	{
> 		ImageParser result[] = { new JpegImageParser(), new TiffImageParser(),
> //				new PngImageParser() 
> //				new BmpImageParser(),
> //				new GifImageParser(), new PsdImageParser(),
> //				new PNMImageParser(), new IcoImageParser(),
> 		// new JBig2ImageParser(),
> 		// new TgaImageParser(),
> 		};
> 		return result;
> 	}
> {code}
> *It has been proposed to make an Android compatible version of Commons Imaging, and I'd like to propose this work to be started :) I'd also like to contribute as much as I can, but I'm not confident enough to be the main resource in such a task.*
> It seems to me that simply commenting out all references and usage of, say, {{java.awt.Dimension}} is a unneccesarily crude fix, as this class appears to me to be a simple (?) wrapper class of two dimensions (height and width)? Why not replace this with something compatible with Android, and thus preserve functionality? [This StackOverflow post|https://stackoverflow.com/questions/8876130/class-dimension-for-java-on-android] discusses writing an equivalent class, or, alternatively, using [{{Point}}|https://developer.android.com/reference/android/graphics/Point.html].



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)