JAVA 按任意角度旋转图片,并生成新的旋转后图片(转自:http://www.hackchina.com/r/21265/RotateImage.java__html)
2011-09-18 20:23
651 查看
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);// 过滤图像,目标图像在filteredBufImage bufImage = 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); } }
相关文章推荐
- Java简易图片翻转以及任意角度旋转
- Java实现图片内容无损任意角度旋转
- Java实现图片任意角度旋转
- Java实现图片内容无损任意角度旋转
- JAVA对图片的任意角度旋转,以及镜像操作
- Java实现图片内容无损任意角度旋转
- Java基础(五):Java实现图片无损任意角度旋转
- Java实现图片内容无损任意角度旋转
- java 实现图片任意角度旋转,及背景透明
- html2image html转换为图片 生成快照 java
- Winform以任意角度旋转PictureBox中的图片的方法
- JQuery插件让图片旋转任意角度且代码极其简单
- Java使用wkhtmltox实现HTML代码生成PDF文档或者图片
- 图片任意角度旋转 梯形变换 任意四边形变换
- 任意角度图片旋转
- C# 图片处理之:旋转图片任意角度 .
- C# 图片处理之:旋转图片任意角度
- C#实现任意角度旋转图片(方法1)
- java html生成图片后保存
- C#实现任意角度旋转图片(方法1)