mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-05 04:25:29 -04:00
Merge pull request #32 from rtimpe/master
Support registration of JPEG plugins when the classloader can't find sun plugins
This commit is contained in:
commit
7c012323e5
@ -0,0 +1,36 @@
|
||||
package com.twelvemonkeys.imageio.plugins.jpeg;
|
||||
|
||||
import javax.imageio.spi.ImageReaderSpi;
|
||||
import javax.imageio.spi.ImageWriterSpi;
|
||||
import javax.imageio.spi.ServiceRegistry;
|
||||
|
||||
public class ImageFormatFilter implements ServiceRegistry.Filter {
|
||||
String name;
|
||||
|
||||
public ImageFormatFilter (String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public boolean filter (Object obj) {
|
||||
try {
|
||||
if (obj instanceof ImageReaderSpi) {
|
||||
return contains(((ImageReaderSpi) obj).getFormatNames(), name);
|
||||
} else if (obj instanceof ImageWriterSpi) {
|
||||
return contains(((ImageWriterSpi) obj).getFormatNames(), name);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean contains (String[] names, String name) {
|
||||
for (int i = 0; i < names.length; i++) {
|
||||
if (name.equalsIgnoreCase(names[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -38,6 +38,7 @@ import javax.imageio.spi.ImageReaderSpi;
|
||||
import javax.imageio.spi.ServiceRegistry;
|
||||
import javax.imageio.stream.ImageInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
@ -85,14 +86,13 @@ public class JPEGImageReaderSpi extends ImageReaderSpi {
|
||||
}
|
||||
|
||||
static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
||||
// Should be safe to lookup now, as the bundled providers are hardcoded usually
|
||||
try {
|
||||
return (ImageReaderSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"));
|
||||
Iterator<ImageReaderSpi> it = registry.getServiceProviders(ImageReaderSpi.class, new ImageFormatFilter("JPEG"), true);
|
||||
|
||||
while (it.hasNext()) {
|
||||
ImageReaderSpi imageReaderSpi = it.next();
|
||||
if (imageReaderSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")) {
|
||||
return imageReaderSpi;
|
||||
}
|
||||
catch (ClassNotFoundException ignore) {
|
||||
}
|
||||
catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -39,6 +39,7 @@ import javax.imageio.spi.ImageWriterSpi;
|
||||
import javax.imageio.spi.ServiceRegistry;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
@ -86,14 +87,13 @@ public class JPEGImageWriterSpi extends ImageWriterSpi {
|
||||
}
|
||||
|
||||
static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
||||
// Should be safe to lookup now, as the bundled providers are hardcoded usually
|
||||
try {
|
||||
return (ImageWriterSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"));
|
||||
Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, new ImageFormatFilter("JPEG"), true);
|
||||
|
||||
while (it.hasNext()) {
|
||||
ImageWriterSpi imageWriterSpi = it.next();
|
||||
if (imageWriterSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")) {
|
||||
return imageWriterSpi;
|
||||
}
|
||||
catch (ClassNotFoundException ignore) {
|
||||
}
|
||||
catch (SecurityException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user