Rotated

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);
            }
        });
    }
}