Java Examples for javax.imageio.spi.ImageWriterSpi
The following java examples will help you to understand the usage of javax.imageio.spi.ImageWriterSpi. These source code samples are taken from different open source projects.
Example 1
Project: Classeur-master File: Engine.java View source code |
public void metainf() { metainf("javax.imageio.spi.ImageReaderSpi", "uk.co.mmscomputing.imageio.bmp.BMPImageReaderSpi"); metainf("javax.imageio.spi.ImageReaderSpi", "uk.co.mmscomputing.imageio.sff.SFFImageReaderSpi"); metainf("javax.imageio.spi.ImageReaderSpi", "uk.co.mmscomputing.imageio.ppm.PPMImageReaderSpi"); metainf("javax.imageio.spi.ImageReaderSpi", "uk.co.mmscomputing.imageio.tiff.TIFFImageReaderSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.bmp.BMPImageWriterSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.sff.SFFImageWriterSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.ppm.PBMImageWriterSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.ppm.PGMImageWriterSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.ppm.PPMImageWriterSpi"); metainf("javax.imageio.spi.ImageWriterSpi", "uk.co.mmscomputing.imageio.tiff.TIFFImageWriterSpi"); metainf("javax.sound.sampled.spi.MixerProvider", "uk.co.mmscomputing.sound.provider.MixerProvider"); }
Example 2
Project: imageio-ext-master File: ImageIOUtilities.java View source code |
// Method to return JDK core ImageReaderSPI/ImageWriterSPI for a // given formatName. public static List<ImageReaderWriterSpi> getJDKImageReaderWriterSPI(ServiceRegistry registry, String formatName, boolean isReader) { IIORegistry iioRegistry = (IIORegistry) registry; final Class<? extends ImageReaderWriterSpi> spiClass; final String descPart; if (isReader) { spiClass = ImageReaderSpi.class; descPart = " image reader"; } else { spiClass = ImageWriterSpi.class; descPart = " image writer"; } // useOrdering final Iterator<? extends ImageReaderWriterSpi> iter = iioRegistry.getServiceProviders(spiClass, true); String formatNames[]; ImageReaderWriterSpi provider; String desc = "standard " + formatName + descPart; String jiioPath = "com.sun.media.imageioimpl"; Locale locale = Locale.getDefault(); ArrayList<ImageReaderWriterSpi> list = new ArrayList<ImageReaderWriterSpi>(); while (iter.hasNext()) { provider = (ImageReaderWriterSpi) iter.next(); // Look for JDK core ImageWriterSpi's if (provider.getVendorName().startsWith("Sun Microsystems") && desc.equalsIgnoreCase(provider.getDescription(locale)) && // not JAI Image I/O plugins !provider.getPluginClassName().startsWith(jiioPath)) { // Get the formatNames supported by this Spi formatNames = provider.getFormatNames(); for (int i = 0; i < formatNames.length; i++) { if (formatNames[i].equalsIgnoreCase(formatName)) { // Must be a JDK provided ImageReader/ImageWriter list.add(provider); break; } } } } return list; }
Example 3
Project: geotoolkit-master File: MosaicImageWriter.java View source code |
/** * Gets and initializes an {@link ImageWriter} that can encode the specified image. The * returned writer has its {@linkplain ImageWriter#setOutput output} already set. If the * output is different than the {@linkplain Tile#getInput tile input}, then it is probably * an {@link ImageOutputStream} and closing it is caller responsibility. * <p> * This method extracts an {@code ImageWriter} instance from the given cache, if possible. * If no suitable writer is available, then a new one is created but <strong>not</strong> * cached; it is caller responsibility to reset the writer and cache it after the write * operation has been completed. * * @param tile The tile to encode. * @param image The image associated to the specified tile. * @param cache An initially empty list of image writers created during the write process. * @return The image writer that seems to be the most appropriated (never {@code null}). * @throws IOException If no suitable image writer has been found or if an error occurred * while creating an image writer or initializing it. */ private ReaderInputPair.WithWriter getImageWriter(final Tile tile, final RenderedImage image, final Queue<ReaderInputPair.WithWriter> cache) throws IOException { // Note: we rename "Tile.input" as "output" because we want to write in it. final Object output = tile.getInput(); final Class<?> outputType = output.getClass(); final ImageReaderSpi readerSpi = tile.getImageReaderSpi(); // Created only if needed. ImageOutputStream stream = null; /* * The result of this method is determined entirely by the (readerSpi, outputType) * pair and by implementation of the user-overrideable filter(ImageWriter) method. * We will search iteratively for the first suitable entry. * * Note: Using Map<ReaderInputPair, Queue<ImageWriter>> could be more performant than * the iteration performed below, but the queue is usually very short since its length * is approximatively the number of processors. In addition, in the typical case where * all tiles use the same format, the iterator will stop at the first item in the queue. * So a Map would really bring no performance benefit for the "normal" case at the cost * of more complex code (harder to count the total number of ImageWriters and to dispose * the oldest ones). */ final ReaderInputPair.WithWriter cacheEntry = new ReaderInputPair.WithWriter(readerSpi, outputType); if (cache != null) { ReaderInputPair.WithWriter candidate = null; synchronized (cache) { for (final Iterator<ReaderInputPair.WithWriter> it = cache.iterator(); it.hasNext(); ) { final ReaderInputPair.WithWriter c = it.next(); if (cacheEntry.equals(c)) { candidate = c; it.remove(); break; } } } /* * If we have found a candidate, define its output and check if filter(ImageWriter) * accepts it. If the image writer is not accepted, the remaining of this method will * try to get an other instance from the IIORegistry. * * Note that the remaining of this method basically perform the same check 4 times, * each time using a different way to get the ImageWriter instances to test. */ if (candidate != null) { final ImageWriter writer = candidate.writer; if (candidate.needStream) { stream = ImageIO.createImageOutputStream(output); writer.setOutput(stream); } else { writer.setOutput(output); } if (filter(writer)) { return candidate; } writer.dispose(); } } /* * The search will be performed using two different strategies: * * 1) Check the plugins specified in 'spiNames' since we assume that they * will encode the image in the best suited format for the reader. * 2) (to be run if the above strategy did not found a suitable writer), * look for providers by their format name. */ int spiNameIndex = 0; final String[] spiNames = readerSpi.getImageWriterSpiNames(); final String[] formatNames = readerSpi.getFormatNames(); final IIORegistry registry = IIORegistry.getDefaultInstance(); final Set<ImageWriterSpi> providers = new LinkedHashSet<>(); // To be initialized when first needed. List<ImageWriterSpi> ignored = null; // To be initialized when first needed. Iterator<ImageWriterSpi> it = null; boolean canIgnore = true; while (true) { // The exit point is in the middle of the loop, after "if (!it.hasNext())". final ImageWriterSpi spi; if (spiNames != null && spiNameIndex < spiNames.length) { /* * ---- First strategy (see above comment) -------- */ final String spiName = spiNames[spiNameIndex++]; final Class<?> spiType; try { spiType = Class.forName(spiName); } catch (ClassNotFoundException e) { Logging.recoverableException(LOGGER, MosaicImageWriter.class, "getImageWriter", e); continue; } final Object candidate = registry.getServiceProviderByClass(spiType); if (!(candidate instanceof ImageWriterSpi)) { // No instance is registered for the given class. Search an other writer. continue; } spi = (ImageWriterSpi) candidate; } else { /* * ---- Second strategy (see above comment) -------- * To be run only after every providers * listed in 'spiNames' have been tried. */ if (it == null) { // Executed the first time that the second strategy is run. it = registry.getServiceProviders(ImageWriterSpi.class, true); } /* * If we have examined every pertinent providers listed by IIORegistry but some * of those providers have been ignored, and if we found no "normal" provider, * then take a second look to the providers that we have ignored. * * The ignored providers are considered only if we found no "normal" providers, * because the "normal" providers are examined again after this loop and should * have precedence over the ignored providers. */ if (!it.hasNext()) { if (ignored == null || !providers.isEmpty()) { // This is the only exit point of the while(true) loop. break; } it = ignored.iterator(); ignored = null; canIgnore = false; } spi = it.next(); if (!ArraysExt.intersects(formatNames, spi.getFormatNames())) { // Not a provider for the format we are looking for. continue; } /* * Ignore the providers that are wrappers around "native" providers, because we * don't want to write metadata like ".prj" or ".tfw" files for every tiles. * However keep trace of the ignored providers, so we can give a second look * at them later if we find no "normal" provider. */ if (canIgnore && Tile.ignore(spi)) { if (ignored == null) { ignored = new ArrayList<>(4); } ignored.add(spi); continue; } } /* * If a suitable writer is found and is capable to encode the output, returns * it immediately. Otherwise the writers are stored in an Set as we found them, * in order to try them again with an ImageOutputStream after this loop. */ if (spi.canEncodeImage(image) && providers.add(spi)) { for (final Class<?> legalType : spi.getOutputTypes()) { if (legalType.isAssignableFrom(outputType)) { final ImageWriter writer = spi.createWriterInstance(); writer.setOutput(output); if (filter(writer)) { if (stream != null) { stream.close(); } cacheEntry.writer = writer; return cacheEntry; } writer.dispose(); break; } } } } /* * No provider accept the output directly. This output is typically a File or URL. * Creates an image output stream from it and try again. */ if (!providers.isEmpty()) { if (stream == null) { stream = ImageIO.createImageOutputStream(output); } if (stream != null) { final Class<? extends ImageOutputStream> streamType = stream.getClass(); for (final ImageWriterSpi spi : providers) { for (final Class<?> legalType : spi.getOutputTypes()) { if (legalType.isAssignableFrom(streamType)) { final ImageWriter writer = spi.createWriterInstance(); writer.setOutput(stream); if (filter(writer)) { cacheEntry.writer = writer; cacheEntry.needStream = true; return cacheEntry; } writer.dispose(); break; } } } } } if (stream != null) { stream.close(); } throw new UnsupportedImageFormatException(Errors.format(Errors.Keys.NoImageWriter)); }
Example 4
Project: openjdk-master File: DataTransferer.java View source code |
byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator<ImageWriter> writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
try (ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos)) {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 5
Project: PSD-master File: ServiceRegistry.java View source code |
@SuppressWarnings({ "UnnecessaryFullyQualifiedName" })
public static void main(String[] pArgs) {
abstract class Spi {
}
class One extends Spi {
}
class Two extends Spi {
}
ServiceRegistry testRegistry = new ServiceRegistry(Arrays.<Class<?>>asList(java.nio.charset.spi.CharsetProvider.class, java.nio.channels.spi.SelectorProvider.class, javax.imageio.spi.ImageReaderSpi.class, javax.imageio.spi.ImageWriterSpi.class, Spi.class).iterator());
testRegistry.registerApplicationClasspathSPIs();
One one = new One();
Two two = new Two();
testRegistry.register(one, Spi.class);
testRegistry.register(two, Spi.class);
testRegistry.deregister(one);
testRegistry.deregister(one, Spi.class);
testRegistry.deregister(two, Spi.class);
testRegistry.deregister(two);
Iterator<Class<?>> categories = testRegistry.categories();
System.out.println("Categories: ");
while (categories.hasNext()) {
Class<?> category = categories.next();
System.out.println(" " + category.getName() + ":");
Iterator<?> providers = testRegistry.providers(category);
Object provider = null;
while (providers.hasNext()) {
provider = providers.next();
System.out.println(" " + provider);
if (provider instanceof javax.imageio.spi.ImageReaderWriterSpi) {
System.out.println(" - " + ((javax.imageio.spi.ImageReaderWriterSpi) provider).getDescription(null));
}
// Don't remove last one, it's removed later to exercise more code :-)
if (providers.hasNext()) {
providers.remove();
}
}
// Remove the last item from all categories
if (provider != null) {
Iterator containers = testRegistry.containingCategories(provider);
int count = 0;
while (containers.hasNext()) {
if (category == containers.next()) {
containers.remove();
count++;
}
}
if (count != 1) {
System.err.println("Removed " + provider + " from " + count + " categories");
}
}
// Remove all using providers iterator
providers = testRegistry.providers(category);
if (!providers.hasNext()) {
System.out.println("All providers successfully deregistered");
}
while (providers.hasNext()) {
System.err.println("Not removed: " + providers.next());
}
}
}
Example 6
Project: TwelveMonkeys-master File: ServiceRegistry.java View source code |
@SuppressWarnings({ "UnnecessaryFullyQualifiedName" })
public static void main(String[] pArgs) {
abstract class Spi {
}
class One extends Spi {
}
class Two extends Spi {
}
ServiceRegistry testRegistry = new ServiceRegistry(Arrays.<Class<?>>asList(java.nio.charset.spi.CharsetProvider.class, java.nio.channels.spi.SelectorProvider.class, javax.imageio.spi.ImageReaderSpi.class, javax.imageio.spi.ImageWriterSpi.class, Spi.class).iterator());
testRegistry.registerApplicationClasspathSPIs();
One one = new One();
Two two = new Two();
testRegistry.register(one, Spi.class);
testRegistry.register(two, Spi.class);
testRegistry.deregister(one);
testRegistry.deregister(one, Spi.class);
testRegistry.deregister(two, Spi.class);
testRegistry.deregister(two);
Iterator<Class<?>> categories = testRegistry.categories();
System.out.println("Categories: ");
while (categories.hasNext()) {
Class<?> category = categories.next();
System.out.println(" " + category.getName() + ":");
Iterator<?> providers = testRegistry.providers(category);
Object provider = null;
while (providers.hasNext()) {
provider = providers.next();
System.out.println(" " + provider);
if (provider instanceof javax.imageio.spi.ImageReaderWriterSpi) {
System.out.println(" - " + ((javax.imageio.spi.ImageReaderWriterSpi) provider).getDescription(null));
}
// Don't remove last one, it's removed later to exercise more code :-)
if (providers.hasNext()) {
providers.remove();
}
}
// Remove the last item from all categories
if (provider != null) {
Iterator containers = testRegistry.containingCategories(provider);
int count = 0;
while (containers.hasNext()) {
if (category == containers.next()) {
containers.remove();
count++;
}
}
if (count != 1) {
System.err.println("Removed " + provider + " from " + count + " categories");
}
}
// Remove all using providers iterator
providers = testRegistry.providers(category);
if (!providers.hasNext()) {
System.out.println("All providers successfully deregistered");
}
while (providers.hasNext()) {
System.err.println("Not removed: " + providers.next());
}
}
}
Example 7
Project: freehep-ncolor-pdf-master File: ImageIOExportFileType.java View source code |
public void onRegistration(ServiceRegistry registry, Class category) { // run over all ImageWriterSpis and store their formats Alphabetically IIORegistry imageRegistry = IIORegistry.getDefaultInstance(); Iterator providers = imageRegistry.getServiceProviders(ImageWriterSpi.class, false); ExportFileTypeRegistry exportRegistry = ExportFileTypeRegistry.getDefaultInstance(null); while (providers.hasNext()) { ImageWriterSpi writerSpi = (ImageWriterSpi) providers.next(); String[] formats = writerSpi.getFileSuffixes(); if ((formats != null) && (formats[0] != null)) { exportRegistry.add(new ImageExportFileType(writerSpi)); } else { System.err.println(getClass() + ": Cannot register " + writerSpi + " because it has no filesuffixes."); } } /* // Look for the last ExportFileType so that these ImageExportFileTypes // are registered neatly behind that one. ExportFileType previous = null; Iterator exportTypes = registry.getServiceProviders( ExportFileType.class, true); while (exportTypes.hasNext()) { previous = (ExportFileType) exportTypes.next(); } // run over all formats and book them as ExportFileTypes Iterator formats = formatSet.iterator(); while (formats.hasNext()) { String format = (String) formats.next(); ExportFileType export = ImageExportFileType.getInstance(format); if (export != null) { registry.registerServiceProvider(export, ExportFileType.class); if (previous != null) { registry.unsetOrdering(ExportFileType.class, previous, export); registry.setOrdering(ExportFileType.class, previous, export); // System.out.println("Ordering set : "+result); } previous = export; } else { System.err.println(getClass() + ": Invalid format: " + format + "."); } } */ registry.deregisterServiceProvider(this, category); }
Example 8
Project: freehep-vectorgraphics-master File: ImageIOExportFileType.java View source code |
@SuppressWarnings("unchecked") public void onRegistration(ServiceRegistry registry, Class<?> category) { // run over all ImageWriterSpis and store their formats Alphabetically Iterator<ImageWriterSpi> providers = providerList.iterator(); ExportFileTypeRegistry exportRegistry = ExportFileTypeRegistry.getDefaultInstance(null); while (providers.hasNext()) { ImageWriterSpi writerSpi = (ImageWriterSpi) providers.next(); String[] formats = writerSpi.getFileSuffixes(); if ((formats != null) && (formats[0] != null)) { exportRegistry.add(new ImageExportFileType(writerSpi)); } else { System.err.println(getClass() + ": Cannot register " + writerSpi + " because it has no filesuffixes."); } } registry.deregisterServiceProvider(this, (Class<ImageIOExportFileType>) category); }
Example 9
Project: jdk7u-jdk-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 10
Project: ManagedRuntimeInitiative-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 11
Project: openjdk8-jdk-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 12
Project: JCGO-master File: DataTransferer.java View source code |
/**
* Translates a Java Image into a byte array which contains
* an image data in the given standard format.
*
* @param mimeType image MIME type, such as: image/png, image/jpeg
*/
protected byte[] imageToStandardBytes(Image image, String mimeType) throws IOException {
RenderedImage renderedImage = null;
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
if (!writerIterator.hasNext()) {
throw new IOException("No registered service provider can encode " + " an image to " + mimeType);
}
if (image instanceof RenderedImage) {
renderedImage = (RenderedImage) image;
} else {
int width = 0;
int height = 0;
if (image instanceof sun.awt.image.Image) {
ImageRepresentation ir = ((sun.awt.image.Image) image).getImageRep();
ir.reconstruct(ImageObserver.ALLBITS);
width = ir.getWidth();
height = ir.getHeight();
} else {
width = image.getWidth(null);
height = image.getHeight(null);
}
ColorModel model = ColorModel.getRGBdefault();
WritableRaster raster = model.createCompatibleWritableRaster(width, height);
BufferedImage bufferedImage = new BufferedImage(model, raster, model.isAlphaPremultiplied(), null);
Graphics g = bufferedImage.getGraphics();
try {
g.drawImage(image, 0, 0, width, height, null);
} finally {
g.dispose();
}
renderedImage = bufferedImage;
}
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 13
Project: cocoon-master File: ImageOpReader.java View source code |
private void write(BufferedImage image) throws ProcessingException, IOException {
ImageTypeSpecifier its = ImageTypeSpecifier.createFromRenderedImage(image);
Iterator writers = ImageIO.getImageWriters(its, format);
ImageWriter writer = null;
if (writers.hasNext()) {
writer = (ImageWriter) writers.next();
}
if (writer == null) {
throw new ProcessingException("Unable to find a ImageWriter: " + format);
}
ImageWriterSpi spi = writer.getOriginatingProvider();
String[] mimetypes = spi.getMIMETypes();
if (getLogger().isInfoEnabled()) {
getLogger().info("Setting content-type: " + mimetypes[0]);
}
response.setHeader("Content-Type", mimetypes[0]);
ImageOutputStream output = ImageIO.createImageOutputStream(out);
try {
writer.setOutput(output);
writer.write(image);
} finally {
writer.dispose();
output.close();
out.flush();
// Niclas Hedhman: Stream is closed in superclass.
}
}
Example 14
Project: rrd4j-master File: ImageWorker.java View source code |
void saveImage(OutputStream stream, String type, float quality, boolean interlaced) throws IOException {
//The first writer is arbitratry choosen
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(type);
ImageWriter writer = iter.next();
BufferedImage outputImage = img;
ImageWriteParam iwp = writer.getDefaultWriteParam();
ImageWriterSpi imgProvider = writer.getOriginatingProvider();
img.coerceData(false);
// JPEG don't like transparency
if (!imgProvider.canEncodeImage(outputImage) || "image/jpeg".equals(imgProvider.getMIMETypes()[0].toLowerCase())) {
int w = img.getWidth();
int h = img.getHeight();
outputImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
outputImage.getGraphics().drawImage(img, 0, 0, w, h, null);
if (!imgProvider.canEncodeImage(outputImage)) {
throw new RuntimeException("Invalid image type");
}
}
//If lossy compression, use the quality
if (!imgProvider.isFormatLossless()) {
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(quality);
}
if (iwp.canWriteProgressive()) {
iwp.setProgressiveMode(interlaced ? ImageWriteParam.MODE_DEFAULT : ImageWriteParam.MODE_DISABLED);
}
if (!imgProvider.canEncodeImage(outputImage)) {
throw new RuntimeException("Invalid image type");
}
ImageOutputStream imageStream = ImageIO.createImageOutputStream(stream);
writer.setOutput(imageStream);
try {
writer.write(null, new IIOImage(outputImage, null, null), iwp);
imageStream.flush();
} catch (IOException e) {
writer.abort();
throw e;
} finally {
try {
imageStream.close();
} catch (Exception inner) {
}
writer.dispose();
}
}
Example 15
Project: Weasis-master File: ImageioCodec.java View source code |
// ================================================================================ // OSGI service implementation // ================================================================================ @Activate protected void activate(ComponentContext context) { // Do not use cache. Images must be download locally before reading them. ImageIO.setUseCache(false); // SPI Issue Resolution // Register imageio SPI with the classloader of this bundle // and unregister imageio SPI if imageio.jar is also in the jre/lib/ext folder Class[] jaiCodecs = { ChannelImageInputStreamSpi.class, ChannelImageOutputStreamSpi.class, J2KImageReaderSpi.class, J2KImageReaderCodecLibSpi.class, WBMPImageReaderSpi.class, BMPImageReaderSpi.class, PNMImageReaderSpi.class, RawImageReaderSpi.class, TIFFImageReaderSpi.class, J2KImageWriterSpi.class, J2KImageWriterCodecLibSpi.class, WBMPImageWriterSpi.class, BMPImageWriterSpi.class, GIFImageWriterSpi.class, PNMImageWriterSpi.class, RawImageWriterSpi.class, TIFFImageWriterSpi.class }; for (Class c : jaiCodecs) { ImageioUtil.registerServiceProvider(c); } // Set priority to these codec which have better performance to the one in JRE ImageioUtil.registerServiceProviderInHighestPriority(CLibJPEGImageReaderSpi.class, ImageReaderSpi.class, //$NON-NLS-1$ "jpeg"); ImageioUtil.registerServiceProviderInHighestPriority(CLibJPEGImageWriterSpi.class, ImageWriterSpi.class, //$NON-NLS-1$ "jpeg"); //$NON-NLS-1$ ImageioUtil.registerServiceProviderInHighestPriority(CLibPNGImageReaderSpi.class, ImageReaderSpi.class, "png"); //$NON-NLS-1$ ImageioUtil.registerServiceProviderInHighestPriority(CLibPNGImageWriterSpi.class, ImageWriterSpi.class, "png"); // TODO Should be in properties? // Unregister sun native jpeg codec // ImageioUtil.unRegisterServiceProvider(registry, CLibJPEGImageReaderSpi.class); // Register the ImageRead and ImageWrite operation for JAI new ImageReadWriteSpi().updateRegistry(JAIUtil.getOperationRegistry()); }
Example 16
Project: ae-awt-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 17
Project: ikvm-openjdk-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 18
Project: JDK-master File: BMPImageWriter.java View source code |
protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
ImageWriterSpi spi = this.getOriginatingProvider();
if (!spi.canEncodeImage(imgType)) {
return false;
}
int biType = imgType.getBufferedImageType();
int bpp = imgType.getColorModel().getPixelSize();
if (compressionType == BI_RLE4 && bpp != 4) {
// only 4bpp images can be encoded as BI_RLE4
return false;
}
if (compressionType == BI_RLE8 && bpp != 8) {
// only 8bpp images can be encoded as BI_RLE8
return false;
}
if (bpp == 16) {
/*
* Technically we expect that we may be able to
* encode only some of SinglePixelPackedSampleModel
* images here.
*
* In addition we should take into account following:
*
* 1. BI_RGB case, according to the MSDN description:
*
* The bitmap has a maximum of 2^16 colors. If the
* biCompression member of the BITMAPINFOHEADER is BI_RGB,
* the bmiColors member of BITMAPINFO is NULL. Each WORD
* in the bitmap array represents a single pixel. The
* relative intensities of red, green, and blue are
* represented with five bits for each color component.
*
* 2. BI_BITFIELDS case, according ot the MSDN description:
*
* Windows 95/98/Me: When the biCompression member is
* BI_BITFIELDS, the system supports only the following
* 16bpp color masks: A 5-5-5 16-bit image, where the blue
* mask is 0x001F, the green mask is 0x03E0, and the red mask
* is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
* is 0x001F, the green mask is 0x07E0, and the red mask is
* 0xF800.
*/
boolean canUseRGB = false;
boolean canUseBITFIELDS = false;
SampleModel sm = imgType.getSampleModel();
if (sm instanceof SinglePixelPackedSampleModel) {
int[] sizes = ((SinglePixelPackedSampleModel) sm).getSampleSize();
canUseRGB = true;
canUseBITFIELDS = true;
for (int i = 0; i < sizes.length; i++) {
canUseRGB &= (sizes[i] == 5);
canUseBITFIELDS &= ((sizes[i] == 5) || (i == 1 && sizes[i] == 6));
}
}
return (((compressionType == BI_RGB) && canUseRGB) || ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
}
return true;
}
Example 19
Project: multimedia-indexing-master File: ImageIOGreyScale.java View source code |
/** * Returns an <code>Iterator</code> containing all currently registered <code>ImageWriter</code>s that * claim to be able to encode the named format. * * @param formatName * a <code>String</code> containing the informal name of a format (<i>e.g.</i>, "jpeg" or * "tiff". * * @return an <code>Iterator</code> containing <code>ImageWriter</code>s. * * @exception IllegalArgumentException * if <code>formatName</code> is <code>null</code>. * * @see javax.imageio.spi.ImageWriterSpi#getFormatNames */ public static Iterator<ImageWriter> getImageWritersByFormatName(String formatName) { if (formatName == null) { throw new IllegalArgumentException("formatName == null!"); } Iterator iter; // Ensure category is present try { iter = theRegistry.getServiceProviders(ImageWriterSpi.class, new ContainsFilter(writerFormatNamesMethod, formatName), true); } catch (IllegalArgumentException e) { return new HashSet().iterator(); } return new ImageWriterIterator(iter); }
Example 20
Project: property-db-master File: ImageWriter.java View source code |
/** {@collect.stats}
* Sets the destination to the given
* <code>ImageOutputStream</code> or other <code>Object</code>.
* The destination is assumed to be ready to accept data, and will
* not be closed at the end of each write. This allows distributed
* imaging applications to transmit a series of images over a
* single network connection. If <code>output</code> is
* <code>null</code>, any currently set output will be removed.
*
* <p> If <code>output</code> is an
* <code>ImageOutputStream</code>, calls to the
* <code>write</code>, <code>writeToSequence</code>, and
* <code>prepareWriteEmpty</code>/<code>endWriteEmpty</code>
* methods will preserve the existing contents of the stream.
* Other write methods, such as <code>writeInsert</code>,
* <code>replaceStreamMetadata</code>,
* <code>replaceImageMetadata</code>, <code>replacePixels</code>,
* <code>prepareInsertEmpty</code>/<code>endInsertEmpty</code>,
* and <code>endWriteSequence</code>, require the full contents
* of the stream to be readable and writable, and may alter any
* portion of the stream.
*
* <p> Use of a general <code>Object</code> other than an
* <code>ImageOutputStream</code> is intended for writers that
* interact directly with an output device or imaging protocol.
* The set of legal classes is advertised by the writer's service
* provider's <code>getOutputTypes</code> method; most writers
* will return a single-element array containing only
* <code>ImageOutputStream.class</code> to indicate that they
* accept only an <code>ImageOutputStream</code>.
*
* <p> The default implementation sets the <code>output</code>
* instance variable to the value of <code>output</code> after
* checking <code>output</code> against the set of classes
* advertised by the originating provider, if there is one.
*
* @param output the <code>ImageOutputStream</code> or other
* <code>Object</code> to use for future writing.
*
* @exception IllegalArgumentException if <code>output</code> is
* not an instance of one of the classes returned by the
* originating service provider's <code>getOutputTypes</code>
* method.
*
* @see #getOutput
*/
public void setOutput(Object output) {
if (output != null) {
ImageWriterSpi provider = getOriginatingProvider();
if (provider != null) {
Class[] classes = provider.getOutputTypes();
boolean found = false;
for (int i = 0; i < classes.length; i++) {
if (classes[i].isInstance(output)) {
found = true;
break;
}
}
if (!found) {
throw new IllegalArgumentException("Illegal output type!");
}
}
}
this.output = output;
}
Example 21
Project: geowebcache-master File: ImageEncoderImpl.java View source code |
/**
* Encodes the selected image with the defined output object. The user can set the aggressive outputStream if supported.
*
* @param image Image to write.
* @param destination Destination object where the image is written.
* @param aggressiveOutputStreamOptimization Parameter used if aggressive outputStream optimization must be used.
* @throws IOException
*/
public void encode(RenderedImage image, Object destination, boolean aggressiveOutputStreamOptimization, MimeType type, Map<String, ?> map) throws Exception {
if (!isAggressiveOutputStreamSupported() && aggressiveOutputStreamOptimization) {
throw new UnsupportedOperationException(OPERATION_NOT_SUPPORTED);
}
// Selection of the first priority writerSpi
ImageWriterSpi newSpi = getWriterSpi();
if (newSpi != null) {
// Creation of the associated Writer
ImageWriter writer = null;
ImageOutputStream stream = null;
try {
writer = newSpi.createWriterInstance();
// Check if the input object is an OutputStream
if (destination instanceof OutputStream) {
// Use of the ImageOutputStreamAdapter
if (isAggressiveOutputStreamSupported()) {
stream = new ImageOutputStreamAdapter((OutputStream) destination);
} else {
stream = new MemoryCacheImageOutputStream((OutputStream) destination);
}
// Preparation of the ImageWriteParams
ImageWriteParam params = null;
RenderedImage finalImage = image;
if (helper != null) {
params = helper.prepareParams(inputParams, writer);
finalImage = helper.prepareImage(image, type);
}
// Image writing
writer.setOutput(stream);
writer.write(null, new IIOImage(finalImage, null, null), params);
} else {
throw new IllegalArgumentException("Wrong output object");
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw e;
} finally {
// Writer disposal
if (writer != null) {
writer.dispose();
}
// Stream closure
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
stream = null;
}
}
}
}
Example 22
Project: haskell-java-parser-master File: ImageIO.java View source code |
public boolean filter(Object provider) { if (provider instanceof ImageReaderSpi) { ImageWriterSpi spi = (ImageWriterSpi) provider; String[] formatNames = spi.getFormatNames(); for (int i = formatNames.length - 1; i >= 0; --i) if (formatName.equals(formatNames[i])) return true; } return false; }
Example 23
Project: constellation-master File: WMSRequestsTest.java View source code |
/**
* Initialize the list of layers from the defined providers in Constellation's configuration.
*/
@PostConstruct
public void initLayerList() {
SpringHelper.setApplicationContext(applicationContext);
if (!initialized) {
try {
try {
layerBusiness.removeAll();
serviceBusiness.deleteAll();
dataBusiness.deleteAll();
providerBusiness.removeAll();
} catch (Exception ex) {
}
// coverage-file datastore
final File rootDir = AbstractGrizzlyServer.initDataDirectory();
final ProviderFactory covFilefactory = DataProviders.getInstance().getFactory("coverage-store");
final ParameterValueGroup sourceCF = covFilefactory.getProviderDescriptor().createValue();
getOrCreateValue(sourceCF, "id").setValue("coverageTestSrc");
getOrCreateValue(sourceCF, "load_all").setValue(true);
final ParameterValueGroup choice3 = getOrCreateGroup(sourceCF, "choice");
final ParameterValueGroup srcCFConfig = getOrCreateGroup(choice3, "FileCoverageStoreParameters");
getOrCreateValue(srcCFConfig, "path").setValue(new URL("file:" + rootDir.getAbsolutePath() + "/org/constellation/data/SSTMDE200305.png"));
getOrCreateValue(srcCFConfig, "type").setValue("AUTO");
getOrCreateValue(srcCFConfig, "namespace").setValue("no namespace");
providerBusiness.storeProvider("coverageTestSrc", null, ProviderType.LAYER, "coverage-store", sourceCF);
dataBusiness.create(new QName("SSTMDE200305"), "coverageTestSrc", "COVERAGE", false, true, null, null);
final ProviderFactory ffactory = DataProviders.getInstance().getFactory("feature-store");
final File outputDir = initDataDirectory();
final ParameterValueGroup sourcef = ffactory.getProviderDescriptor().createValue();
getOrCreateValue(sourcef, "id").setValue("shapeSrc");
getOrCreateValue(sourcef, "load_all").setValue(true);
final ParameterValueGroup choice = getOrCreateGroup(sourcef, "choice");
final ParameterValueGroup shpconfig = createGroup(choice, "ShapefileParametersFolder");
String path;
if (outputDir.getAbsolutePath().endsWith("org/constellation/ws/embedded/wms111/styles")) {
path = outputDir.getAbsolutePath().substring(0, outputDir.getAbsolutePath().indexOf("org/constellation/ws/embedded/wms111/styles"));
} else {
path = outputDir.getAbsolutePath();
}
getOrCreateValue(shpconfig, "url").setValue(new URL("file:" + path + "/org/constellation/ws/embedded/wms111/shapefiles"));
getOrCreateValue(shpconfig, "namespace").setValue("http://www.opengis.net/gml");
final ParameterValueGroup layer = getOrCreateGroup(sourcef, "Layer");
getOrCreateValue(layer, "name").setValue("NamedPlaces");
getOrCreateValue(layer, "style").setValue("cite_style_NamedPlaces");
providerBusiness.storeProvider("shapeSrc", null, ProviderType.LAYER, "feature-store", sourcef);
dataBusiness.create(new QName("http://www.opengis.net/gml", "BuildingCenters"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "BasicPolygons"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Bridges"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Streams"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Lakes"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "NamedPlaces"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Buildings"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "RoadSegments"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "DividedRoutes"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Forests"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "MapNeatline"), "shapeSrc", "VECTOR", false, true, null, null);
dataBusiness.create(new QName("http://www.opengis.net/gml", "Ponds"), "shapeSrc", "VECTOR", false, true, null, null);
final LayerContext config = new LayerContext();
config.getCustomParameters().put("shiroAccessible", "false");
config.setGetFeatureInfoCfgs(FeatureInfoUtilities.createGenericConfiguration());
serviceBusiness.create("wms", "default", config, null);
final Details details = serviceBusiness.getInstanceDetails("wms", "default", "eng");
details.getServiceConstraints().setLayerLimit(100);
serviceBusiness.setInstanceDetails("wms", "default", details, "eng", true);
layerBusiness.add("SSTMDE200305", null, "coverageTestSrc", null, "default", "wms", null);
layerBusiness.add("BuildingCenters", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("BasicPolygons", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Bridges", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Streams", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Lakes", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("NamedPlaces", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Buildings", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("RoadSegments", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("DividedRoutes", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Forests", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("MapNeatline", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
layerBusiness.add("Ponds", "http://www.opengis.net/gml", "shapeSrc", null, "default", "wms", null);
final LayerContext config2 = new LayerContext();
config2.setSupportedLanguages(new Languages(Arrays.asList(new Language("fre"), new Language("eng", true))));
config2.getCustomParameters().put("shiroAccessible", "false");
config2.setGetFeatureInfoCfgs(FeatureInfoUtilities.createGenericConfiguration());
serviceBusiness.create("wms", "wms1", config2, null);
layerBusiness.add("Lakes", "http://www.opengis.net/gml", "shapeSrc", null, "wms1", "wms", null);
final Details serviceEng = new Details();
serviceEng.setDescription("Serveur Cartographique. Contact: someone@geomatys.fr. Carte haute qualité.");
serviceEng.setIdentifier("wms1");
serviceEng.setKeywords(Arrays.asList("WMS"));
serviceEng.setName("this is the default english capabilities");
final AccessConstraint cstr = new AccessConstraint("NONE", "NONE", 20, 1024, 1024);
serviceEng.setServiceConstraints(cstr);
final Contact ct = new Contact();
serviceEng.setServiceContact(ct);
serviceEng.setVersions(Arrays.asList("1.1.1", "1.3.0"));
serviceBusiness.setInstanceDetails("wms", "wms1", serviceEng, "eng", true);
//ConfigDirectory.writeServiceMetadata("wms1", "wms", serviceEng, "eng");
final Details serviceFre = new Details();
serviceFre.setDescription("Serveur Cartographique. Contact: someone@geomatys.fr. Carte haute qualité.");
serviceFre.setIdentifier("wms1");
serviceFre.setKeywords(Arrays.asList("WMS"));
serviceFre.setName("Ceci est le document capabilities français");
serviceFre.setServiceConstraints(cstr);
serviceFre.setServiceContact(ct);
serviceFre.setVersions(Arrays.asList("1.1.1", "1.3.0"));
serviceBusiness.setInstanceDetails("wms", "wms1", serviceFre, "fre", false);
final LayerContext config3 = new LayerContext();
config3.getCustomParameters().put("shiroAccessible", "false");
config3.getCustomParameters().put("supported_versions", "1.3.0");
config3.setGetFeatureInfoCfgs(FeatureInfoUtilities.createGenericConfiguration());
final Details details3 = new Details();
details3.setIdentifier("wms2");
details3.setName("wms2");
details3.setVersions(Arrays.asList("1.3.0"));
serviceBusiness.create("wms", "wms2", config3, details3);
layerBusiness.add("SSTMDE200305", null, "coverageTestSrc", null, "wms2", "wms", null);
layerBusiness.add("BuildingCenters", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("BasicPolygons", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Bridges", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Streams", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Lakes", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("NamedPlaces", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Buildings", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("RoadSegments", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("DividedRoutes", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Forests", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("MapNeatline", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
layerBusiness.add("Ponds", "http://www.opengis.net/gml", "shapeSrc", null, "wms2", "wms", null);
initServer(null, null);
pool = WMSMarshallerPool.getInstance();
WorldFileImageReader.Spi.registerDefaults(null);
WMSPortrayal.setEmptyExtension(true);
//reset values, only allow pure java readers
for (String jn : ImageIO.getReaderFormatNames()) {
Registry.setNativeCodecAllowed(jn, ImageReaderSpi.class, false);
}
//reset values, only allow pure java writers
for (String jn : ImageIO.getWriterFormatNames()) {
Registry.setNativeCodecAllowed(jn, ImageWriterSpi.class, false);
}
DataProviders.getInstance().reload();
initialized = true;
} catch (Exception ex) {
Logging.getLogger("org.constellation.ws.embedded").log(Level.SEVERE, null, ex);
}
}
}
Example 24
Project: geoserver-master File: GeoserverInitStartupListener.java View source code |
public void contextInitialized(ServletContextEvent sce) {
// start up tctool - remove it before committing!!!!
// new tilecachetool.TCTool().setVisible(true);
// Register logging, and bridge to JAI logging
GeoTools.init((Hints) null);
// Custom GeoTools ImagingListener used to ignore common warnings
JAI.getDefaultInstance().setImagingListener(new ImagingListener() {
final Logger LOGGER = Logging.getLogger("javax.media.jai");
@Override
public boolean errorOccurred(String message, Throwable thrown, Object where, boolean isRetryable) throws RuntimeException {
if (isSerializableRenderedImageFinalization(where, thrown)) {
LOGGER.log(Level.FINEST, message, thrown);
} else if (message.contains("Continuing in pure Java mode")) {
LOGGER.log(Level.FINE, message, thrown);
} else {
LOGGER.log(Level.INFO, message, thrown);
}
// we are not trying to recover
return false;
}
private boolean isSerializableRenderedImageFinalization(Object where, Throwable t) {
if (!(where instanceof SerializableRenderedImage)) {
return false;
}
// check if it's the finalizer
StackTraceElement[] elements = t.getStackTrace();
for (StackTraceElement element : elements) {
if (element.getMethodName().equals("finalize") && element.getClassName().endsWith("SerializableRenderedImage"))
return true;
}
return false;
}
});
// setup concurrent operation registry
JAI jaiDef = JAI.getDefaultInstance();
if (!(jaiDef.getOperationRegistry() instanceof ConcurrentOperationRegistry || jaiDef.getOperationRegistry() instanceof it.geosolutions.jaiext.ConcurrentOperationRegistry)) {
jaiDef.setOperationRegistry(ConcurrentOperationRegistry.initializeRegistry());
}
// setup the concurrent tile cache (has proper memory limit handling also for small tiles)
if (!(jaiDef.getTileCache() instanceof ConcurrentTileCacheMultiMap)) {
jaiDef.setTileCache(new ConcurrentTileCacheMultiMap());
}
// make sure we remember if GeoServer controls logging or not
String strValue = GeoServerExtensions.getProperty(LoggingUtils.RELINQUISH_LOG4J_CONTROL, sce.getServletContext());
relinquishLoggingControl = Boolean.valueOf(strValue);
// subsystem
if (System.getProperty("org.geotools.referencing.forceXY") == null) {
System.setProperty("org.geotools.referencing.forceXY", "true");
}
if (Boolean.TRUE.equals(Hints.getSystemDefault(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER))) {
Hints.putSystemDefault(Hints.FORCE_AXIS_ORDER_HONORING, "http");
}
Hints.putSystemDefault(Hints.LENIENT_DATUM_SHIFT, true);
// setup the referencing tolerance to make it more tolerant to tiny differences
// between projections (increases the chance of matching a random prj file content
// to an actual EPSG code
String comparisonToleranceProperty = GeoServerExtensions.getProperty(COMPARISON_TOLERANCE_PROPERTY);
double comparisonTolerance = DEFAULT_COMPARISON_TOLERANCE;
if (comparisonToleranceProperty != null) {
try {
comparisonTolerance = Double.parseDouble(comparisonToleranceProperty);
} catch (NumberFormatException nfe) {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.warning("Unable to parse the specified COMPARISON_TOLERANCE " + "system property: " + comparisonToleranceProperty + " which should be a number. Using Default: " + DEFAULT_COMPARISON_TOLERANCE);
}
}
}
Hints.putSystemDefault(Hints.COMPARISON_TOLERANCE, comparisonTolerance);
final Hints defHints = GeoTools.getDefaultHints();
// Initialize GridCoverageFactory so that we don't make a lookup every time a factory is needed
Hints.putSystemDefault(Hints.GRID_COVERAGE_FACTORY, CoverageFactoryFinder.getGridCoverageFactory(defHints));
// don't allow the connection to the EPSG database to time out. This is a server app,
// we can afford keeping the EPSG db always on
System.setProperty("org.geotools.epsg.factory.timeout", "-1");
// HACK: java.util.prefs are awful. See
// http://www.allaboutbalance.com/disableprefs. When the site comes
// back up we should implement their better way of fixing the problem.
System.setProperty("java.util.prefs.syncInterval", "5000000");
// Fix issue with tomcat and JreMemoryLeakPreventionListener causing issues with
// IIORegistry leading to imageio plugins not being properly initialized
ImageIO.scanForPlugins();
// in any case, the native png reader is worse than the pure java ones, so
// let's disable it (the native png writer is on the other side faster)...
ImageIOExt.allowNativeCodec("png", ImageReaderSpi.class, false);
ImageIOExt.allowNativeCodec("png", ImageWriterSpi.class, true);
// initialize GeoTools factories so that we don't make a SPI lookup every time a factory is needed
Hints.putSystemDefault(Hints.FILTER_FACTORY, CommonFactoryFinder.getFilterFactory2(null));
Hints.putSystemDefault(Hints.STYLE_FACTORY, CommonFactoryFinder.getStyleFactory(null));
Hints.putSystemDefault(Hints.FEATURE_FACTORY, CommonFactoryFinder.getFeatureFactory(null));
// initialize the default executor service
final ThreadPoolExecutor executor = new ThreadPoolExecutor(CoverageAccessInfoImpl.DEFAULT_CorePoolSize, CoverageAccessInfoImpl.DEFAULT_MaxPoolSize, CoverageAccessInfoImpl.DEFAULT_KeepAliveTime, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
Hints.putSystemDefault(Hints.EXECUTOR_SERVICE, executor);
}
Example 25
Project: jai-imageio-core-master File: BMPImageWriter.java View source code |
protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
ImageWriterSpi spi = this.getOriginatingProvider();
if (!spi.canEncodeImage(imgType)) {
return false;
}
int bpp = imgType.getColorModel().getPixelSize();
if (compressionType == BI_RLE4 && bpp != 4) {
// only 4bpp images can be encoded as BI_RLE4
return false;
}
if (compressionType == BI_RLE8 && bpp != 8) {
// only 8bpp images can be encoded as BI_RLE8
return false;
}
if (bpp == 16) {
/*
* Technically we expect that we may be able to
* encode only some of SinglePixelPackedSampleModel
* images here.
*
* In addition we should take into account following:
*
* 1. BI_RGB case, according to the MSDN description:
*
* The bitmap has a maximum of 2^16 colors. If the
* biCompression member of the BITMAPINFOHEADER is BI_RGB,
* the bmiColors member of BITMAPINFO is NULL. Each WORD
* in the bitmap array represents a single pixel. The
* relative intensities of red, green, and blue are
* represented with five bits for each color component.
*
* 2. BI_BITFIELDS case, according ot the MSDN description:
*
* Windows 95/98/Me: When the biCompression member is
* BI_BITFIELDS, the system supports only the following
* 16bpp color masks: A 5-5-5 16-bit image, where the blue
* mask is 0x001F, the green mask is 0x03E0, and the red mask
* is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
* is 0x001F, the green mask is 0x07E0, and the red mask is
* 0xF800.
*/
boolean canUseRGB = false;
boolean canUseBITFIELDS = false;
SampleModel sm = imgType.getSampleModel();
if (sm instanceof SinglePixelPackedSampleModel) {
int[] sizes = ((SinglePixelPackedSampleModel) sm).getSampleSize();
canUseRGB = true;
canUseBITFIELDS = true;
for (int i = 0; i < sizes.length; i++) {
canUseRGB &= (sizes[i] == 5);
canUseBITFIELDS &= ((sizes[i] == 5) || (i == 1 && sizes[i] == 6));
}
}
return (((compressionType == BI_RGB) && canUseRGB) || ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
}
return true;
}
Example 26
Project: libbio-formats-java-master File: BMPImageWriter.java View source code |
protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
ImageWriterSpi spi = this.getOriginatingProvider();
if (!spi.canEncodeImage(imgType)) {
return false;
}
int bpp = imgType.getColorModel().getPixelSize();
if (compressionType == BI_RLE4 && bpp != 4) {
// only 4bpp images can be encoded as BI_RLE4
return false;
}
if (compressionType == BI_RLE8 && bpp != 8) {
// only 8bpp images can be encoded as BI_RLE8
return false;
}
if (bpp == 16) {
/*
* Technically we expect that we may be able to
* encode only some of SinglePixelPackedSampleModel
* images here.
*
* In addition we should take into account following:
*
* 1. BI_RGB case, according to the MSDN description:
*
* The bitmap has a maximum of 2^16 colors. If the
* biCompression member of the BITMAPINFOHEADER is BI_RGB,
* the bmiColors member of BITMAPINFO is NULL. Each WORD
* in the bitmap array represents a single pixel. The
* relative intensities of red, green, and blue are
* represented with five bits for each color component.
*
* 2. BI_BITFIELDS case, according ot the MSDN description:
*
* Windows 95/98/Me: When the biCompression member is
* BI_BITFIELDS, the system supports only the following
* 16bpp color masks: A 5-5-5 16-bit image, where the blue
* mask is 0x001F, the green mask is 0x03E0, and the red mask
* is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
* is 0x001F, the green mask is 0x07E0, and the red mask is
* 0xF800.
*/
boolean canUseRGB = false;
boolean canUseBITFIELDS = false;
SampleModel sm = imgType.getSampleModel();
if (sm instanceof SinglePixelPackedSampleModel) {
int[] sizes = ((SinglePixelPackedSampleModel) sm).getSampleSize();
canUseRGB = true;
canUseBITFIELDS = true;
for (int i = 0; i < sizes.length; i++) {
canUseRGB &= (sizes[i] == 5);
canUseBITFIELDS &= ((sizes[i] == 5) || (i == 1 && sizes[i] == 6));
}
}
return (((compressionType == BI_RGB) && canUseRGB) || ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
}
return true;
}
Example 27
Project: bioformats-master File: BMPImageWriter.java View source code |
protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
ImageWriterSpi spi = this.getOriginatingProvider();
if (!spi.canEncodeImage(imgType)) {
return false;
}
int bpp = imgType.getColorModel().getPixelSize();
if (compressionType == BI_RLE4 && bpp != 4) {
// only 4bpp images can be encoded as BI_RLE4
return false;
}
if (compressionType == BI_RLE8 && bpp != 8) {
// only 8bpp images can be encoded as BI_RLE8
return false;
}
if (bpp == 16) {
/*
* Technically we expect that we may be able to
* encode only some of SinglePixelPackedSampleModel
* images here.
*
* In addition we should take into account following:
*
* 1. BI_RGB case, according to the MSDN description:
*
* The bitmap has a maximum of 2^16 colors. If the
* biCompression member of the BITMAPINFOHEADER is BI_RGB,
* the bmiColors member of BITMAPINFO is NULL. Each WORD
* in the bitmap array represents a single pixel. The
* relative intensities of red, green, and blue are
* represented with five bits for each color component.
*
* 2. BI_BITFIELDS case, according ot the MSDN description:
*
* Windows 95/98/Me: When the biCompression member is
* BI_BITFIELDS, the system supports only the following
* 16bpp color masks: A 5-5-5 16-bit image, where the blue
* mask is 0x001F, the green mask is 0x03E0, and the red mask
* is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
* is 0x001F, the green mask is 0x07E0, and the red mask is
* 0xF800.
*/
boolean canUseRGB = false;
boolean canUseBITFIELDS = false;
SampleModel sm = imgType.getSampleModel();
if (sm instanceof SinglePixelPackedSampleModel) {
int[] sizes = ((SinglePixelPackedSampleModel) sm).getSampleSize();
canUseRGB = true;
canUseBITFIELDS = true;
for (int i = 0; i < sizes.length; i++) {
canUseRGB &= (sizes[i] == 5);
canUseBITFIELDS &= ((sizes[i] == 5) || (i == 1 && sizes[i] == 6));
}
}
return (((compressionType == BI_RGB) && canUseRGB) || ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
}
return true;
}
Example 28
Project: classlib6-master File: DataTransferer.java View source code |
protected byte[] imageToStandardBytesImpl(RenderedImage renderedImage, String mimeType) throws IOException {
Iterator writerIterator = ImageIO.getImageWritersByMIMEType(mimeType);
ImageTypeSpecifier typeSpecifier = new ImageTypeSpecifier(renderedImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOException ioe = null;
while (writerIterator.hasNext()) {
ImageWriter imageWriter = (ImageWriter) writerIterator.next();
ImageWriterSpi writerSpi = imageWriter.getOriginatingProvider();
if (!writerSpi.canEncodeImage(typeSpecifier)) {
continue;
}
try {
ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(baos);
try {
imageWriter.setOutput(imageOutputStream);
imageWriter.write(renderedImage);
imageOutputStream.flush();
} finally {
imageOutputStream.close();
}
} catch (IOException e) {
imageWriter.dispose();
baos.reset();
ioe = e;
continue;
}
imageWriter.dispose();
baos.close();
return baos.toByteArray();
}
baos.close();
if (ioe == null) {
ioe = new IOException("Registered service providers failed to encode " + renderedImage + " to " + mimeType);
}
throw ioe;
}
Example 29
Project: folio100_frameworks_base-master File: ImageWriter.java View source code |
/**
* Sets the specified Object to the output of this ImageWriter.
*
* @param output
* the Object which represents destination, it can be
* ImageOutputStream or other objects.
*/
public void setOutput(Object output) {
if (output != null) {
ImageWriterSpi spi = getOriginatingProvider();
if (null != spi) {
Class[] outTypes = spi.getOutputTypes();
boolean supported = false;
for (Class<?> element : outTypes) {
if (element.isInstance(output)) {
supported = true;
break;
}
}
if (!supported) {
throw new IllegalArgumentException("output " + output + " is not supported");
}
}
}
this.output = output;
}
Example 30
Project: JamVM-PH-master File: ImageIO.java View source code |
public boolean filter(Object provider) { if (provider instanceof ImageWriterSpi) { ImageWriterSpi spi = (ImageWriterSpi) provider; String[] formatNames = spi.getFormatNames(); for (int i = formatNames.length - 1; i >= 0; --i) if (formatName.equals(formatNames[i])) return true; } return false; }
Example 31
Project: open-mika-master File: ImageWriter.java View source code |
/**
* Sets the specified Object to the output of this ImageWriter.
*
* @param output
* the Object which represents destination, it can be
* ImageOutputStream or other objects.
*/
public void setOutput(Object output) {
if (output != null) {
ImageWriterSpi spi = getOriginatingProvider();
if (null != spi) {
Class[] outTypes = spi.getOutputTypes();
boolean supported = false;
for (Class<?> element : outTypes) {
if (element.isInstance(output)) {
supported = true;
break;
}
}
if (!supported) {
throw new IllegalArgumentException("output " + output + " is not supported");
}
}
}
this.output = output;
}
Example 32
Project: snap-desktop-master File: SnapApp.java View source code |
private static void initImageIO() {
// todo - actually this should be done in the activator of ceres-jai which does not exist yet
Lookup.Result<ModuleInfo> moduleInfos = Lookup.getDefault().lookupResult(ModuleInfo.class);
String ceresJaiCodeName = "org.esa.snap.ceres.jai";
Optional<? extends ModuleInfo> info = moduleInfos.allInstances().stream().filter( moduleInfo -> ceresJaiCodeName.equals(moduleInfo.getCodeName())).findFirst();
if (info.isPresent()) {
ClassLoader classLoader = info.get().getClassLoader();
IIORegistry iioRegistry = IIORegistry.getDefaultInstance();
iioRegistry.registerServiceProviders(IIORegistry.lookupProviders(ImageReaderSpi.class, classLoader));
iioRegistry.registerServiceProviders(IIORegistry.lookupProviders(ImageWriterSpi.class, classLoader));
} else {
LOG.warning(String.format("Module '%s' not found. Not able to load image-IO services.", ceresJaiCodeName));
}
}
Example 33
Project: WS171-frameworks-base-master File: ImageWriter.java View source code |
/**
* Sets the specified Object to the output of this ImageWriter.
*
* @param output
* the Object which represents destination, it can be
* ImageOutputStream or other objects.
*/
public void setOutput(Object output) {
if (output != null) {
ImageWriterSpi spi = getOriginatingProvider();
if (null != spi) {
Class[] outTypes = spi.getOutputTypes();
boolean supported = false;
for (Class<?> element : outTypes) {
if (element.isInstance(output)) {
supported = true;
break;
}
}
if (!supported) {
throw new IllegalArgumentException("output " + output + " is not supported");
}
}
}
this.output = output;
}
Example 34
Project: geotools-2.7.x-master File: ImageWorker.java View source code |
/** * Writes outs the image contained into this {@link ImageWorker} as a GIF * using the provided destination, compression and compression rate. * <p> * It is worth to point out that the only compressions algorithm availaible * with the jdk {@link GIFImageWriter} is "LZW" while the compression rates * have to be confined between 0 and 1. AN acceptable values is usally 0.75f. * <p> * The destination object can be anything providing that we have an * {@link ImageOutputStreamSpi} that recognizes it. * * @param destination * where to write the internal {@link #image} as a gif. * @param compression * The name of compression algorithm. * @param compressionRate * percentage of compression, as a number between 0 and 1. * @return this {@link ImageWorker}. * @throws IOException * In case an error occurs during the search for an * {@link ImageOutputStream} or during the eoncding process. * * @see #forceIndexColorModelForGIF(boolean) */ public final ImageWorker writeGIF(final Object destination, final String compression, final float compressionRate) throws IOException { forceIndexColorModelForGIF(true); final IIORegistry registry = IIORegistry.getDefaultInstance(); Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, true); ImageWriterSpi spi = null; while (it.hasNext()) { final ImageWriterSpi candidate = it.next(); if (containsFormatName(candidate.getFormatNames(), "gif")) { if (spi == null) { spi = candidate; } else { final String name = candidate.getClass().getName(); if (name.equals("com.sun.media.imageioimpl.plugins.gif.GIFImageWriterSpi")) { spi = candidate; break; } } } } if (spi == null) { throw new IIOException(Errors.format(ErrorKeys.NO_IMAGE_WRITER)); } final ImageOutputStream stream = ImageIOExt.createImageOutputStream(image, destination); if (stream == null) throw new IIOException(Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "stream")); final ImageWriter writer = spi.createWriterInstance(); final ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(compression); param.setCompressionQuality(compressionRate); try { writer.setOutput(stream); writer.write(null, new IIOImage(image, null, null), param); } finally { try { stream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } try { writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } } return this; }
Example 35
Project: geotools-tike-master File: ImageWorker.java View source code |
/** * Writes outs the image contained into this {@link ImageWorker} as a GIF * using the provided destination, compression and compression rate. * <p> * It is worth to point out that the only compressions algorithm availaible * with the jdk {@link GIFImageWriter} is "LZW" while the compression rates * have to be confined between 0 and 1. AN acceptable values is usally 0.75f. * <p> * The destination object can be anything providing that we have an * {@link ImageOutputStreamSpi} that recognizes it. * * @param destination * where to write the internal {@link #image} as a gif. * @param compression * The name of compression algorithm. * @param compressionRate * percentage of compression, as a number between 0 and 1. * @return this {@link ImageWorker}. * @throws IOException * In case an error occurs during the search for an * {@link ImageOutputStream} or during the eoncding process. * * @see #forceIndexColorModelForGIF(boolean) */ public final ImageWorker writeGIF(final Object destination, final String compression, final float compressionRate) throws IOException { forceIndexColorModelForGIF(true); final IIORegistry registry = IIORegistry.getDefaultInstance(); Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, true); ImageWriterSpi spi = null; while (it.hasNext()) { final ImageWriterSpi candidate = it.next(); if (containsFormatName(candidate.getFormatNames(), "gif")) { if (spi == null) { spi = candidate; } else { final String name = candidate.getClass().getName(); if (name.equals("com.sun.media.imageioimpl.plugins.gif.GIFImageWriterSpi")) { spi = candidate; break; } } } } if (spi == null) { throw new IIOException(Errors.format(ErrorKeys.NO_IMAGE_WRITER)); } final ImageOutputStream stream = ImageIO.createImageOutputStream(destination); if (stream == null) throw new IIOException(Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "stream")); final ImageWriter writer = spi.createWriterInstance(); final ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(compression); param.setCompressionQuality(compressionRate); try { writer.setOutput(stream); writer.write(null, new IIOImage(image, null, null), param); } finally { try { stream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } try { writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } } return this; }
Example 36
Project: junrar-android-master File: BMPImageWriter.java View source code |
protected boolean canEncodeImage(int compression, ImageTypeSpecifier imgType) {
ImageWriterSpi spi = this.getOriginatingProvider();
if (!spi.canEncodeImage(imgType)) {
return false;
}
int biType = imgType.getBufferedImageType();
int bpp = imgType.getColorModel().getPixelSize();
if (compressionType == BI_RLE4 && bpp != 4) {
// only 4bpp images can be encoded as BI_RLE4
return false;
}
if (compressionType == BI_RLE8 && bpp != 8) {
// only 8bpp images can be encoded as BI_RLE8
return false;
}
if (bpp == 16) {
/*
* Technically we expect that we may be able to
* encode only some of SinglePixelPackedSampleModel
* images here.
*
* In addition we should take into account following:
*
* 1. BI_RGB case, according to the MSDN description:
*
* The bitmap has a maximum of 2^16 colors. If the
* biCompression member of the BITMAPINFOHEADER is BI_RGB,
* the bmiColors member of BITMAPINFO is NULL. Each WORD
* in the bitmap array represents a single pixel. The
* relative intensities of red, green, and blue are
* represented with five bits for each color component.
*
* 2. BI_BITFIELDS case, according ot the MSDN description:
*
* Windows 95/98/Me: When the biCompression member is
* BI_BITFIELDS, the system supports only the following
* 16bpp color masks: A 5-5-5 16-bit image, where the blue
* mask is 0x001F, the green mask is 0x03E0, and the red mask
* is 0x7C00; and a 5-6-5 16-bit image, where the blue mask
* is 0x001F, the green mask is 0x07E0, and the red mask is
* 0xF800.
*/
boolean canUseRGB = false;
boolean canUseBITFIELDS = false;
SampleModel sm = imgType.getSampleModel();
if (sm instanceof SinglePixelPackedSampleModel) {
int[] sizes = ((SinglePixelPackedSampleModel) sm).getSampleSize();
canUseRGB = true;
canUseBITFIELDS = true;
for (int i = 0; i < sizes.length; i++) {
canUseRGB &= (sizes[i] == 5);
canUseBITFIELDS &= ((sizes[i] == 5) || (i == 1 && sizes[i] == 6));
}
}
return (((compressionType == BI_RGB) && canUseRGB) || ((compressionType == BI_BITFIELDS) && canUseBITFIELDS));
}
return true;
}
Example 37
Project: poreid-master File: ImageUtil.java View source code |
// Method to return JDK core ImageReaderSPI/ImageWriterSPI for a // given formatName. public static List getJDKImageReaderWriterSPI(ServiceRegistry registry, String formatName, boolean isReader) { IIORegistry iioRegistry = (IIORegistry) registry; Class spiClass; String descPart; if (isReader) { spiClass = ImageReaderSpi.class; descPart = " image reader"; } else { spiClass = ImageWriterSpi.class; descPart = " image writer"; } Iterator iter = iioRegistry.getServiceProviders(spiClass, // useOrdering true); String formatNames[]; ImageReaderWriterSpi provider; String desc = "standard " + formatName + descPart; String jiioPath = "com.sun.media.imageioimpl"; Locale locale = Locale.getDefault(); ArrayList list = new ArrayList(); while (iter.hasNext()) { provider = (ImageReaderWriterSpi) iter.next(); // Look for JDK core ImageWriterSpi's if (provider.getVendorName().startsWith("Sun Microsystems") && desc.equalsIgnoreCase(provider.getDescription(locale)) && // not JAI Image I/O plugins !provider.getPluginClassName().startsWith(jiioPath)) { // Get the formatNames supported by this Spi formatNames = provider.getFormatNames(); for (int i = 0; i < formatNames.length; i++) { if (formatNames[i].equalsIgnoreCase(formatName)) { // Must be a JDK provided ImageReader/ImageWriter list.add(provider); break; } } } } return list; }
Example 38
Project: UniversalMediaServer-master File: PMS.java View source code |
/** * Initialization procedure for UMS. * * @return <code>true</code> if the server has been initialized correctly. * <code>false</code> if initialization was aborted. * @throws Exception */ private boolean init() throws Exception { // Show the language selection dialog before displayBanner(); if (!isHeadless() && (configuration.getLanguageRawString() == null || !Languages.isValid(configuration.getLanguageRawString()))) { LanguageSelection languageDialog = new LanguageSelection(null, PMS.getLocale(), false); if (languageDialog != null) { languageDialog.show(); if (languageDialog.isAborted()) { return false; } } } // Call this as early as possible displayBanner(); // Initialize database Tables.checkTables(); // Log registered ImageIO plugins if (LOGGER.isTraceEnabled()) { LOGGER.trace(""); LOGGER.trace("Registered ImageIO reader classes:"); Iterator<ImageReaderSpi> readerIterator = IIORegistry.getDefaultInstance().getServiceProviders(ImageReaderSpi.class, true); while (readerIterator.hasNext()) { ImageReaderSpi reader = readerIterator.next(); LOGGER.trace("Reader class: {}", reader.getPluginClassName()); } LOGGER.trace(""); LOGGER.trace("Registered ImageIO writer classes:"); Iterator<ImageWriterSpi> writerIterator = IIORegistry.getDefaultInstance().getServiceProviders(ImageWriterSpi.class, true); while (writerIterator.hasNext()) { ImageWriterSpi writer = writerIterator.next(); LOGGER.trace("Writer class: {}", writer.getPluginClassName()); } LOGGER.trace(""); } // Wizard if (configuration.isRunWizard() && !isHeadless()) { // Ask the user if they want to run the wizard int whetherToRunWizard = JOptionPane.showConfirmDialog(null, Messages.getString("Wizard.1"), Messages.getString("Dialog.Question"), JOptionPane.YES_NO_OPTION); if (whetherToRunWizard == JOptionPane.YES_OPTION) { // The user has chosen to run the wizard // Total number of questions int numberOfQuestions = 3; // The current question number int currentQuestionNumber = 1; // Ask if they want UMS to start minimized int whetherToStartMinimized = JOptionPane.showConfirmDialog(null, Messages.getString("Wizard.3"), Messages.getString("Wizard.2") + " " + (currentQuestionNumber++) + " " + Messages.getString("Wizard.4") + " " + numberOfQuestions, JOptionPane.YES_NO_OPTION); if (whetherToStartMinimized == JOptionPane.YES_OPTION) { configuration.setMinimized(true); save(); } else if (whetherToStartMinimized == JOptionPane.NO_OPTION) { configuration.setMinimized(false); save(); } // Ask if their network is wired, etc. Object[] options = { Messages.getString("Wizard.8"), Messages.getString("Wizard.9"), Messages.getString("Wizard.10") }; int networkType = JOptionPane.showOptionDialog(null, Messages.getString("Wizard.7"), Messages.getString("Wizard.2") + " " + (currentQuestionNumber++) + " " + Messages.getString("Wizard.4") + " " + numberOfQuestions, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); switch(networkType) { case JOptionPane.YES_OPTION: // Wired (Gigabit) configuration.setMaximumBitrate("0"); configuration.setMPEG2MainSettings("Automatic (Wired)"); configuration.setx264ConstantRateFactor("Automatic (Wired)"); save(); break; case JOptionPane.NO_OPTION: // Wired (100 Megabit) configuration.setMaximumBitrate("90"); configuration.setMPEG2MainSettings("Automatic (Wired)"); configuration.setx264ConstantRateFactor("Automatic (Wired)"); save(); break; case JOptionPane.CANCEL_OPTION: // Wireless configuration.setMaximumBitrate("30"); configuration.setMPEG2MainSettings("Automatic (Wireless)"); configuration.setx264ConstantRateFactor("Automatic (Wireless)"); save(); break; default: break; } // Ask if they want to hide advanced options int whetherToHideAdvancedOptions = JOptionPane.showConfirmDialog(null, Messages.getString("Wizard.11"), Messages.getString("Wizard.2") + " " + (currentQuestionNumber++) + " " + Messages.getString("Wizard.4") + " " + numberOfQuestions, JOptionPane.YES_NO_OPTION); if (whetherToHideAdvancedOptions == JOptionPane.YES_OPTION) { configuration.setHideAdvancedOptions(true); save(); } else if (whetherToHideAdvancedOptions == JOptionPane.NO_OPTION) { configuration.setHideAdvancedOptions(false); save(); } JOptionPane.showMessageDialog(null, Messages.getString("Wizard.13"), Messages.getString("Wizard.12"), JOptionPane.INFORMATION_MESSAGE); configuration.setRunWizard(false); save(); } else if (whetherToRunWizard == JOptionPane.NO_OPTION) { // The user has chosen to not run the wizard // Do not ask them again configuration.setRunWizard(false); save(); } } // Splash Splash splash = null; if (!isHeadless()) { splash = new Splash(configuration); } // The public VERSION field is deprecated. // This is a temporary fix for backwards compatibility VERSION = getVersion(); fileWatcher = new FileWatcher(); globalRepo = new GlobalIdRepo(); AutoUpdater autoUpdater = null; if (Build.isUpdatable()) { String serverURL = Build.getUpdateServerURL(); autoUpdater = new AutoUpdater(serverURL, getVersion()); } registry = createSystemUtils(); if (!isHeadless()) { frame = new LooksFrame(autoUpdater, configuration); } else { LOGGER.info("Graphics environment not available or headless mode is forced"); LOGGER.info("Switching to console mode"); frame = new DummyFrame(); } if (splash != null) { splash.dispose(); } /* * we're here: * * main() -> createInstance() -> init() * * which means we haven't created the instance returned by get() * yet, so the frame appender can't access the frame in the * standard way i.e. PMS.get().getFrame(). we solve it by * inverting control ("don't call us; we'll call you") i.e. * we notify the appender when the frame is ready rather than * e.g. making getFrame() static and requiring the frame * appender to poll it. * * XXX an event bus (e.g. MBassador or Guava EventBus * (if they fix the memory-leak issue)) notification * would be cleaner and could support other lifecycle * notifications (see above). */ FrameAppender.setFrame(frame); configuration.addConfigurationListener(new ConfigurationListener() { @Override public void configurationChanged(ConfigurationEvent event) { if ((!event.isBeforeUpdate()) && PmsConfiguration.NEED_RELOAD_FLAGS.contains(event.getPropertyName())) { frame.setReloadable(true); } } }); // Web stuff if (configuration.useWebInterface()) { web = new RemoteWeb(configuration.getWebPort()); } // init Credentials credMgr = new CredMgr(configuration.getCredFile()); // init dbs keysDb = new UmsKeysDb(); infoDb = new InfoDb(); codes = new CodeDb(); masterCode = null; RendererConfiguration.loadRendererConfigurations(configuration); // Now that renderer confs are all loaded, we can start searching for renderers UPNPHelper.getInstance().init(); // launch ChromecastMgr jmDNS = null; launchJmDNSRenderers(); OutputParams outputParams = new OutputParams(configuration); // Prevent unwanted GUI buffer artifacts (and runaway timers) outputParams.hidebuffer = true; // Make sure buffer is destroyed outputParams.cleanup = true; // Initialize MPlayer and FFmpeg to let them generate fontconfig cache/s if (!configuration.isDisableSubtitles()) { LOGGER.info("Checking the fontconfig cache in the background, this can take two minutes or so."); ProcessWrapperImpl mplayer = new ProcessWrapperImpl(new String[] { configuration.getMplayerPath(), "dummy" }, outputParams); mplayer.runInNewThread(); /** * Note: Different versions of fontconfig and bitness require * different caches, which is why here we ask FFmpeg (64-bit * if possible) to create a cache. * This should result in all of the necessary caches being built. */ if (!Platform.isWindows() || Platform.is64Bit()) { ProcessWrapperImpl ffmpeg = new ProcessWrapperImpl(new String[] { configuration.getFfmpegPath(), "-y", "-f", "lavfi", "-i", "nullsrc=s=720x480:d=1:r=1", "-vf", "ass=DummyInput.ass", "-target", "ntsc-dvd", "-" }, outputParams); ffmpeg.runInNewThread(); } } frame.setStatusCode(0, Messages.getString("PMS.130"), "icon-status-connecting.png"); // Check the existence of VSFilter / DirectVobSub if (registry.isAvis() && registry.getAvsPluginsDir() != null) { LOGGER.debug("AviSynth plugins directory: " + registry.getAvsPluginsDir().getAbsolutePath()); File vsFilterDLL = new File(registry.getAvsPluginsDir(), "VSFilter.dll"); if (vsFilterDLL.exists()) { LOGGER.debug("VSFilter / DirectVobSub was found in the AviSynth plugins directory."); } else { File vsFilterDLL2 = new File(registry.getKLiteFiltersDir(), "vsfilter.dll"); if (vsFilterDLL2.exists()) { LOGGER.debug("VSFilter / DirectVobSub was found in the K-Lite Codec Pack filters directory."); } else { LOGGER.info("VSFilter / DirectVobSub was not found. This can cause problems when trying to play subtitled videos with AviSynth."); } } } // Check if VLC is found String vlcVersion = registry.getVlcVersion(); String vlcPath = registry.getVlcPath(); if (vlcVersion != null && vlcPath != null) { LOGGER.info("Found VLC version " + vlcVersion + " at: " + vlcPath); Version vlc = new Version(vlcVersion); Version requiredVersion = new Version("2.0.2"); if (vlc.compareTo(requiredVersion) <= 0) { LOGGER.error("Only VLC versions 2.0.2 and above are supported"); } } // Check if Kerio is installed if (registry.isKerioFirewall()) { LOGGER.info("Detected Kerio firewall"); } // Force use of specific DVR-MS muxer when it's installed in the right place File dvrsMsffmpegmuxer = new File("win32/dvrms/ffmpeg_MPGMUX.exe"); if (dvrsMsffmpegmuxer.exists()) { configuration.setFfmpegAlternativePath(dvrsMsffmpegmuxer.getAbsolutePath()); } // Disable jaudiotagger logging LogManager.getLogManager().readConfiguration(new ByteArrayInputStream("org.jaudiotagger.level=OFF".getBytes(StandardCharsets.US_ASCII))); // Wrap System.err System.setErr(new PrintStream(new SystemErrWrapper(), true, StandardCharsets.UTF_8.name())); server = new HTTPServer(configuration.getServerPort()); /* * XXX: keep this here (i.e. after registerExtensions and before registerPlayers) so that plugins * can register custom players correctly (e.g. in the GUI) and/or add/replace custom formats * * XXX: if a plugin requires initialization/notification even earlier than * this, then a new external listener implementing a new callback should be added * e.g. StartupListener.registeredExtensions() */ try { ExternalFactory.lookup(); } catch (Exception e) { LOGGER.error("Error loading plugins", e); } // Initialize a player factory to register all players PlayerFactory.initialize(); // Instantiate listeners that require registered players. ExternalFactory.instantiateLateListeners(); // a static block in Player doesn't work (i.e. is called too late). // this must always be called *after* the plugins have loaded. // here's as good a place as any Player.initializeFinalizeTranscoderArgsListeners(); // Any plugin-defined players are now registered, create the gui view. frame.addEngines(); // file AFTER plugins are started if (!isHeadless()) { // but only if we got a GUI of course ((LooksFrame) frame).getPt().init(); } boolean binding = false; try { binding = server.start(); } catch (BindException b) { LOGGER.error("FATAL ERROR: Unable to bind on port: " + configuration.getServerPort() + ", because: " + b.getMessage()); LOGGER.info("Maybe another process is running or the hostname is wrong."); } new Thread("Connection Checker") { @Override public void run() { try { Thread.sleep(7000); } catch (InterruptedException e) { } if (foundRenderers.isEmpty()) { frame.setStatusCode(0, Messages.getString("PMS.0"), "icon-status-notconnected.png"); } else { frame.setStatusCode(0, Messages.getString("PMS.18"), "icon-status-connected.png"); } } }.start(); if (!binding) { return false; } if (web != null && web.getServer() != null) { LOGGER.info("WEB interface is available at: " + web.getUrl()); } // initialize the cache if (configuration.getUseCache()) { mediaLibrary = new MediaLibrary(); LOGGER.info("A tiny cache admin interface is available at: http://" + server.getHost() + ":" + server.getPort() + "/console/home"); } // XXX: this must be called: // a) *after* loading plugins i.e. plugins register root folders then RootFolder.discoverChildren adds them // b) *after* mediaLibrary is initialized, if enabled (above) getRootFolder(RendererConfiguration.getDefaultConf()); frame.serverReady(); ready = true; // UPNPHelper.sendByeBye(); Runtime.getRuntime().addShutdownHook(new Thread("UMS Shutdown") { @Override public void run() { try { for (ExternalListener l : ExternalFactory.getExternalListeners()) { l.shutdown(); } UPNPHelper.shutDownListener(); UPNPHelper.sendByeBye(); LOGGER.debug("Forcing shutdown of all active processes"); for (Process p : currentProcesses) { try { p.exitValue(); } catch (IllegalThreadStateException ise) { LOGGER.trace("Forcing shutdown of process: " + p); ProcessUtil.destroy(p); } } get().getServer().stop(); Thread.sleep(500); } catch (InterruptedException e) { LOGGER.debug("Caught exception", e); } LOGGER.info("Stopping " + PropertiesUtil.getProjectProperties().get("project.name") + " " + getVersion()); /** * Stopping logging gracefully (flushing logs) * No logging is available after this point */ ILoggerFactory iLoggerContext = LoggerFactory.getILoggerFactory(); if (iLoggerContext instanceof LoggerContext) { ((LoggerContext) iLoggerContext).stop(); } else { LOGGER.error("Unable to shut down logging gracefully"); } } }); configuration.setAutoSave(); UPNPHelper.sendByeBye(); LOGGER.trace("Waiting 250 milliseconds..."); Thread.sleep(250); UPNPHelper.sendAlive(); LOGGER.trace("Waiting 250 milliseconds..."); Thread.sleep(250); UPNPHelper.listen(); return true; }
Example 39
Project: geotools-master File: ImageWorker.java View source code |
/** * Writes outs the image contained into this {@link ImageWorker} as a PNG using the provided destination, compression and compression rate. * <p> * The destination object can be anything providing that we have an {@link ImageOutputStreamSpi} that recognizes it. * * @param destination where to write the internal {@link #image} as a PNG. * @param compression algorithm. * @param compressionRate percentage of compression. * @param nativeAcc should we use native acceleration. * @param paletted should we write the png as 8 bits? * @return this {@link ImageWorker}. * @throws IOException In case an error occurs during the search for an {@link ImageOutputStream} or during the eoncding process. * * @todo Current code doesn't check if the writer already accepts the provided destination. It wraps it in a {@link ImageOutputStream} * inconditionnaly. */ public final void writePNG(final Object destination, final String compression, final float compressionRate, final boolean nativeAcc, final boolean paletted) throws IOException { // Reformatting this image for PNG. final boolean hasPalette = image.getColorModel() instanceof IndexColorModel; final boolean hasColorModel = hasPalette ? false : image.getColorModel() instanceof ComponentColorModel; if (paletted && !hasPalette) { // we have to reduce colors forceIndexColorModelForGIF(true); } else { if (!hasColorModel && !hasPalette) { if (LOGGER.isLoggable(Level.FINER)) { LOGGER.fine("Forcing input image to be compatible with PNG: No palette, no component color model"); } // png supports gray, rgb, rgba and paletted 8 bit, but not, for example, double and float values, or 16 bits palettes forceComponentColorModel(); } } // PNG does not support all kinds of index color models if (hasPalette) { IndexColorModel icm = (IndexColorModel) image.getColorModel(); // PNG supports palettes with up to 256 colors, beyond that we have to expand to RGB if (icm.getMapSize() > 256) { if (LOGGER.isLoggable(Level.FINER)) { LOGGER.fine("Forcing input image to be compatible with PNG: Palette with > 256 color is not supported."); } rescaleToBytes(); if (paletted) { forceIndexColorModelForGIF(true); } } } if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine("Encoded input image for png writer"); } // Getting a writer. if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine("Getting a writer"); } ImageWriter writer = null; ImageWriterSpi originatingProvider = null; // ImageIO if (nativeAcc) { if (CLIB_PNG_IMAGE_WRITER_SPI != null) { // let me check if the native writer can encode this image if (CLIB_PNG_IMAGE_WRITER_SPI.canEncodeImage(new ImageTypeSpecifier(image))) { writer = CLIB_PNG_IMAGE_WRITER_SPI.createWriterInstance(); originatingProvider = CLIB_PNG_IMAGE_WRITER_SPI; } else { LOGGER.fine("The ImageIO PNG native encode cannot encode this image!"); writer = null; originatingProvider = null; } } else { LOGGER.fine("Unable to use Native ImageIO PNG writer."); } } // move on with the writer quest if (!nativeAcc || writer == null) { final Iterator<ImageWriter> it = ImageIO.getImageWriters(new ImageTypeSpecifier(image), "PNG"); if (!it.hasNext()) { throw new IllegalStateException(Errors.format(ErrorKeys.NO_IMAGE_WRITER)); } while (it.hasNext()) { writer = it.next(); originatingProvider = writer.getOriginatingProvider(); // check that this is not the native one if (CLIB_PNG_IMAGE_WRITER_SPI != null && originatingProvider.getClass().equals(CLIB_PNG_IMAGE_WRITER_SPI.getClass())) { if (it.hasNext()) { writer = it.next(); originatingProvider = writer.getOriginatingProvider(); } else { LOGGER.fine("Unable to use PNG writer different than ImageIO CLib one"); } } // let me check if the native writer can encode this image (paranoiac checks this was already performed by the ImageIO search if (originatingProvider.canEncodeImage(new ImageTypeSpecifier(image))) { // leave loop break; } // clean writer = null; originatingProvider = null; } } // ok, last resort use the JDK one and reformat the image if (writer == null) { List providers = com.sun.media.imageioimpl.common.ImageUtil.getJDKImageReaderWriterSPI(IIORegistry.getDefaultInstance(), "PNG", false); if (providers == null || providers.isEmpty()) { throw new IllegalStateException("Unable to find JDK Png encoder!"); } originatingProvider = (ImageWriterSpi) providers.get(0); writer = originatingProvider.createWriterInstance(); // kk, last resort reformat the image forceComponentColorModel(true, true); rescaleToBytes(); if (!originatingProvider.canEncodeImage(image)) { throw new IllegalArgumentException("Unable to find a valid PNG Encoder! And believe me, we tried hard!"); } } LOGGER.fine("Using ImageIO Writer with SPI: " + originatingProvider.getClass().getCanonicalName()); // Getting a stream. LOGGER.fine("Setting write parameters for this writer"); ImageWriteParam iwp = null; final ImageOutputStream memOutStream = ImageIOExt.createImageOutputStream(image, destination); if (memOutStream == null) { throw new IIOException(Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "stream")); } if (CLIB_PNG_IMAGE_WRITER_SPI != null && originatingProvider.getClass().equals(CLIB_PNG_IMAGE_WRITER_SPI.getClass())) { // Compressing with native. LOGGER.fine("Writer is native"); iwp = writer.getDefaultWriteParam(); // Define compression mode iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // best compression iwp.setCompressionType(compression); // we can control quality here iwp.setCompressionQuality(compressionRate); // destination image type iwp.setDestinationType(new ImageTypeSpecifier(image.getColorModel(), image.getSampleModel())); } else { // Compressing with pure Java. LOGGER.fine("Writer is NOT native"); // Instantiating PNGImageWriteParam iwp = new PNGImageWriteParam(); // Define compression mode iwp.setCompressionMode(ImageWriteParam.MODE_DEFAULT); } LOGGER.fine("About to write png image"); try { writer.setOutput(memOutStream); writer.write(null, new IIOImage(image, null, null), iwp); } finally { try { writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } try { memOutStream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } } }
Example 40
Project: geotools-old-master File: ImageWorker.java View source code |
/** * Writes outs the image contained into this {@link ImageWorker} as a GIF * using the provided destination, compression and compression rate. * <p> * It is worth to point out that the only compressions algorithm availaible * with the jdk {@link GIFImageWriter} is "LZW" while the compression rates * have to be confined between 0 and 1. AN acceptable values is usally 0.75f. * <p> * The destination object can be anything providing that we have an * {@link ImageOutputStreamSpi} that recognizes it. * * @param destination * where to write the internal {@link #image} as a gif. * @param compression * The name of compression algorithm. * @param compressionRate * percentage of compression, as a number between 0 and 1. * @return this {@link ImageWorker}. * @throws IOException * In case an error occurs during the search for an * {@link ImageOutputStream} or during the eoncding process. * * @see #forceIndexColorModelForGIF(boolean) */ public final ImageWorker writeGIF(final Object destination, final String compression, final float compressionRate) throws IOException { forceIndexColorModelForGIF(true); final IIORegistry registry = IIORegistry.getDefaultInstance(); Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, true); ImageWriterSpi spi = null; while (it.hasNext()) { final ImageWriterSpi candidate = it.next(); if (containsFormatName(candidate.getFormatNames(), "gif")) { if (spi == null) { spi = candidate; } else { final String name = candidate.getClass().getName(); if (name.equals("com.sun.media.imageioimpl.plugins.gif.GIFImageWriterSpi")) { spi = candidate; break; } } } } if (spi == null) { throw new IIOException(Errors.format(ErrorKeys.NO_IMAGE_WRITER)); } final ImageOutputStream stream = ImageIOExt.createImageOutputStream(image, destination); if (stream == null) throw new IIOException(Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "stream")); final ImageWriter writer = spi.createWriterInstance(); final ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(compression); param.setCompressionQuality(compressionRate); try { writer.setOutput(stream); writer.write(null, new IIOImage(image, null, null), param); } finally { try { stream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } try { writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } } return this; }
Example 41
Project: geotools_trunk-master File: ImageWorker.java View source code |
/** * Writes outs the image contained into this {@link ImageWorker} as a GIF * using the provided destination, compression and compression rate. * <p> * It is worth to point out that the only compressions algorithm availaible * with the jdk {@link GIFImageWriter} is "LZW" while the compression rates * have to be confined between 0 and 1. AN acceptable values is usally 0.75f. * <p> * The destination object can be anything providing that we have an * {@link ImageOutputStreamSpi} that recognizes it. * * @param destination * where to write the internal {@link #image} as a gif. * @param compression * The name of compression algorithm. * @param compressionRate * percentage of compression, as a number between 0 and 1. * @return this {@link ImageWorker}. * @throws IOException * In case an error occurs during the search for an * {@link ImageOutputStream} or during the eoncding process. * * @see #forceIndexColorModelForGIF(boolean) */ public final ImageWorker writeGIF(final Object destination, final String compression, final float compressionRate) throws IOException { forceIndexColorModelForGIF(true); final IIORegistry registry = IIORegistry.getDefaultInstance(); Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, true); ImageWriterSpi spi = null; while (it.hasNext()) { final ImageWriterSpi candidate = it.next(); if (containsFormatName(candidate.getFormatNames(), "gif")) { if (spi == null) { spi = candidate; } else { final String name = candidate.getClass().getName(); if (name.equals("com.sun.media.imageioimpl.plugins.gif.GIFImageWriterSpi")) { spi = candidate; break; } } } } if (spi == null) { throw new IIOException(Errors.format(ErrorKeys.NO_IMAGE_WRITER)); } final ImageOutputStream stream = ImageIOExt.createImageOutputStream(image, destination); if (stream == null) throw new IIOException(Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "stream")); final ImageWriter writer = spi.createWriterInstance(); final ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionType(compression); param.setCompressionQuality(compressionRate); try { writer.setOutput(stream); writer.write(null, new IIOImage(image, null, null), param); } finally { try { stream.close(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } try { writer.dispose(); } catch (Throwable e) { if (LOGGER.isLoggable(Level.FINEST)) LOGGER.log(Level.FINEST, e.getLocalizedMessage(), e); } } return this; }