JAVA 按任意角度旋轉圖片,並產生新的旋轉後圖片(轉自:http://www.hackchina.com/r/21265/RotateImage.java__html)

來源:互聯網
上載者:User
import java.awt.Graphics2D;import java.awt.Image;import java.awt.MediaTracker;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Iterator;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageTypeSpecifier;import javax.imageio.ImageWriteParam;import javax.imageio.ImageWriter;import javax.imageio.stream.ImageOutputStream;import javax.swing.JPanel;public class RotateImage extends JPanel {Image image;BufferedImage bufImage; // 用於顯示的緩衝區映像BufferedImage originalBufImage; // 原始緩衝區映像Graphics2D bufImageG; // 緩衝區映像的圖形環境public void loadImage(String fileName) {image = this.getToolkit().getImage(fileName); // 取得映像MediaTracker mt = new MediaTracker(this); // 執行個體化媒體載入器mt.addImage(image, 0); // 增加映像到載入器中try {mt.waitForAll(); // 等待圖片載入} catch (Exception ex) {ex.printStackTrace(); // 輸出出錯資訊}originalBufImage = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); // 建立原始緩衝區映像bufImage = originalBufImage;bufImageG = bufImage.createGraphics(); // 建立bufImage的圖形環境bufImageG.drawImage(image, 0, 0, this); // 傳輸源映像資料到緩衝區映像中}// 過濾映像public void ratoteImage(int angle) {if (bufImage == null)return; // 如果bufImage為空白則直接返回BufferedImage filteredBufImage = new BufferedImage(image.getWidth(this), image.getHeight(this),BufferedImage.TYPE_INT_RGB); // 過濾後的映像AffineTransform transform = new AffineTransform(); // 仿射變換對象transform.rotate(java.lang.Math.toRadians(angle),image.getWidth(this) / 2, image.getHeight(this) / 2); // 旋轉映像AffineTransformOp imageOp = new AffineTransformOp(transform, null);// 建立仿射變換操作對象imageOp.filter(originalBufImage, filteredBufImage);// 過濾映像,靶心圖表像在filteredBufImagebufImage = filteredBufImage; // 讓用於顯示的緩衝區映像指向過濾後的映像drawImg(bufImage);}public void drawImg(BufferedImage image) {ImageWriter writer = null;ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(image);Iterator iter = ImageIO.getImageWriters(type, "jpg");if (iter.hasNext()) {writer = (ImageWriter) iter.next();}if (writer == null) {return;}IIOImage iioImage = new IIOImage(image, null, null);ImageWriteParam param = writer.getDefaultWriteParam();param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);param.setCompressionQuality((float) ((1) / 10.0));ImageOutputStream outputStream;try {outputStream = ImageIO.createImageOutputStream(new File("test.jpg"));writer.setOutput(outputStream);writer.write(null, iioImage, param);} catch (IOException e) {e.printStackTrace();}}/** * @param args */public static void main(String[] args) {RotateImage rotateImg = new RotateImage();rotateImg.loadImage("bm.jpg"); // 裝載圖片rotateImg.ratoteImage(90);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.