ImageIO.write(scaled, "png", new File("temp.png"));
ImageIO.write(scaled, "jpg", new File("temp.jpg"));
BufferedImage.TYPE_INT_RGB;
AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JPanel;/** @author John B. Matthews */public class TransformImage extends JPanel { private static final int SIZE = 128; private static final Font FONT = new Font("Serif", Font.BOLD, SIZE * 7 / 8); private static final BufferedImage errorImage = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_INT_ARGB); { Graphics2D g2d = errorImage.createGraphics(); g2d.setPaint(Color.red.darker()); g2d.setFont(FONT); String s = "\u2298"; int w2 = g2d.getFontMetrics().stringWidth(s) / 2; int h2 = g2d.getFontMetrics().getDescent(); g2d.drawString(s, SIZE / 2 - w2 , SIZE / 2 + h2); g2d.dispose(); } private static BufferedImage scaled; public TransformImage() { BufferedImage image = getSquareImage("image.jpg"); AffineTransform scaleTransform = new AffineTransform(); int w = image.getWidth(); int h = image.getHeight(); // last-in-first-applied: rotate, scale, shear scaleTransform.shear(0.0, 0.0); scaleTransform.scale(0.5, 0.5); scaleTransform.rotate(-Math.PI / 2, w / 2, h / 2); AffineTransformOp scaleOp = new AffineTransformOp( scaleTransform, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); scaled = scaleOp.filter(image, null); setPreferredSize(new Dimension(scaled.getWidth(), scaled.getHeight())); try { ImageIO.write(scaled, "jpg", new File("temp.jpg")); } catch (IOException ex) { ex.printStackTrace(System.err); } } private BufferedImage getSquareImage(String name) { BufferedImage image = null; try { image = ImageIO.read(new File(name)); } catch (IOException ioe) { return errorImage; } int w = image.getWidth(); int h = image.getHeight(); int max = Math.max(w, h); BufferedImage square = new BufferedImage( max, max, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = square.createGraphics(); g2d.drawImage(image, (max - w) / 2, (max - h) / 2, null); g2d.dispose(); return square; } public void paintComponent(Graphics g) { final Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawImage(scaled, 0, 0, null); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new TransformImage()); f.pack(); f.setVisible(true); } }); }}