Not sure if this helps but here's another conversion program in Java which:

- uses AWT but not the toolkit part
- supports GIFs
- is relatively smart about keep the x/y ratio
- would need a little conversion to work in memory without writing to/from
disk

Per Kreipke

P.s. Can't remember where I found portions of this code snippet so I can't
give credit where credit is due, my apologies to the original author.



package org.onclave.util;

import java.awt.Image;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class Thumbnail
{
    public static void main(String[] args)
    {
        System.out.print("starting...\n");
        createThumbnail(args[0], args[1], Integer.parseInt(args[2]));
        System.out.print("finished.\n");
        System.exit(0);
    }

    /**
     * Reads an image in a file and creates
     * a thumbnail in another file.
     * @param orig The name of image file.
     * @param thumb The name of thumbnail file.
     * Will be created if necessary.
     * @param maxDim The width and height of
     * the thumbnail must
     * be maxDim pixels or less.
     */
    public static void createThumbnail(String orig, String thumb, int
maxDim)
    {
        try
        {
            // Get the image from a file.
            Image inImage = new ImageIcon(orig).getImage();

            // Determine the scale.
            double scale = (double)maxDim / (double)
inImage.getHeight(null);
            if (inImage.getWidth(null) > inImage.getHeight(null))
            {
                scale = (double)maxDim / (double) inImage.getWidth(null);
            }

            // Determine size of new image.
            // One of them should equal maxDim.
            int scaledW = (int)(scale * inImage.getWidth(null));
            int scaledH = (int)(scale * inImage.getHeight(null));

            // Create an image buffer in which to paint on.
            BufferedImage outImage = new BufferedImage(scaledW, scaledH,
                BufferedImage.TYPE_INT_RGB);

            // Set the scale.
            AffineTransform tx = new AffineTransform();

            // If the image is smaller than the desired image size,
            // don't bother scaling.
            if (scale < 1.0d)
            {
                tx.scale(scale, scale);
            }

            // Paint image.
            Graphics2D g2d = outImage.createGraphics();
            g2d.drawImage(inImage, tx, null);
            g2d.dispose();

            // JPEG-encode the image and write to file.
            OutputStream os = new FileOutputStream(thumb);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
            encoder.encode(outImage);
            os.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to