JAVA实现图片旋转的一个很好的例子
java图片旋转
import java.awt.Color;import java.awt.Graphics2D;import java.awt.Transparency;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;public class Test1{public static BufferedImage rotateImg(BufferedImage image, int degree, Color bgcolor) throws IOException {int iw = image.getWidth();//原始图象的宽度int ih = image.getHeight();//原始图象的高度int w = 0;int h = 0;int x = 0;int y = 0;degree = degree % 360;if (degree < 0)degree = 360 + degree;//将角度转换到0-360度之间double ang = Math.toRadians(degree);//将角度转为弧度/***确定旋转后的图象的高度和宽度*/if (degree == 180 || degree == 0 || degree == 360){w = iw;h = ih;} else if (degree == 90 || degree == 270){w = ih;h = iw;} else {int d = iw + ih;w = (int) (d * Math.abs(Math.cos(ang)));h = (int) (d * Math.abs(Math.sin(ang)));}x = (w / 2) - (iw / 2);//确定原点坐标y = (h / 2) - (ih / 2);BufferedImage rotatedImage = new BufferedImage(w, h, image.getType());Graphics2D gs = (Graphics2D)rotatedImage.getGraphics();if(bgcolor==null){rotatedImage = gs.getDeviceConfiguration().createCompatibleImage(w, h, Transparency.TRANSLUCENT);}else{gs.setColor(bgcolor);gs.fillRect(0, 0, w, h);//以给定颜色绘制旋转后图片的背景}AffineTransform at = new AffineTransform();at.rotate(ang, w / 2, h / 2);//旋转图象at.translate(x, y);AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);op.filter(image, rotatedImage);image = rotatedImage;// ByteArrayOutputStream byteOut= new ByteArrayOutputStream();// ImageOutputStream iamgeOut = ImageIO.createImageOutputStream(byteOut);// ImageIO.write(image, "png", iamgeOut);ImageIO.write(image, "png", new File("E:\\222.png"));// InputStream inputStream = new ByteArrayInputStream(byteOut.toByteArray());return image;}}。
Java实现图片旋转、指定图像大小和水平翻转
Java实现图⽚旋转、指定图像⼤⼩和⽔平翻转本⽂实例为⼤家分享了Java实现图⽚旋转、指定图像⼤⼩、⽔平翻转,供⼤家参考,具体内容如下package com.zeph.j2se.image;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;public class ImageOperate {/*** 旋转图⽚为指定⾓度** @param bufferedimage* ⽬标图像* @param degree* 旋转⾓度* @return*/public static BufferedImage rotateImage(final BufferedImage bufferedimage,final int degree) {int w = bufferedimage.getWidth();int h = bufferedimage.getHeight();int type = bufferedimage.getColorModel().getTransparency();BufferedImage img;Graphics2D graphics2d;(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics()).setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);graphics2d.drawImage(bufferedimage, 0, 0, null);graphics2d.dispose();return img;}/*** 变更图像为指定⼤⼩** @param bufferedimage* ⽬标图像* @param w* 宽* @param h* ⾼* @return*/public static BufferedImage resizeImage(final BufferedImage bufferedimage,final int w, final int h) {int type = bufferedimage.getColorModel().getTransparency();BufferedImage img;Graphics2D graphics2d;(graphics2d = (img = new BufferedImage(w, h, type)).createGraphics()).setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);graphics2d.drawImage(bufferedimage, 0, 0, w, h, 0, 0,bufferedimage.getWidth(), bufferedimage.getHeight(), null);graphics2d.dispose();return img;}/*** ⽔平翻转图像** @param bufferedimage* ⽬标图像* @return*/public static BufferedImage flipImage(final BufferedImage bufferedimage) {int w = bufferedimage.getWidth();int h = bufferedimage.getHeight();BufferedImage img;Graphics2D graphics2d;(graphics2d = (img = new BufferedImage(w, h, bufferedimage.getColorModel().getTransparency())).createGraphics()).drawImage(bufferedimage, 0, 0, w, h, w, 0, 0, h, null);graphics2d.dispose();return img;}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
08.实现图片旋转
按指定角度进行图片旋转
private double currentAngle;
transform.rotate(Math.toRadians(currentAngle), anchorx, anchory);
左转和右转
public void rotateToRight() { if(currentAngle >= 360) { currentAngle = 0; } currentAngle += 90;
public void rotate(double theta, double anchorx, double anchory)
theta - 用弧度测量的旋转角度 anchorx - 旋转锚点的 X 坐标 anchory - 旋转锚点的 Y 坐标
public static double toRadians(double angdeg) 将角度转换成弧度
北风网在线培训
图片查看器
第八讲:实现图片旋转
讲师:历风
AffineTransform 类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的 线性映射,保留了线的“直线性”和“平行性”。可以使用一系列平移 (translation)、缩放 (scale)、翻转 (flip)、旋转 (rotation) 和错切 (shear) 来构 造仿射变换。
旋转后复位
AffineTransform transform = g2d.getTransform(); AffineTransform oldTransform = (AffineTransform) transform.clone(); int anchorx = this.getWidth() / 2; int anchory = this.getHeight() / 2; transform.rotate(Math.toRadians(currentAngle), anchorx, anchory); g2d.setTransform(transform); int width = image.getWidth(this); int height = image.getHeight(this); int x = (this.getWidth() - width) / 2; int y = (this.getHeight() - height) / 2; g2d.drawImage(image, x, y, this); //复位 g2d.setTransform(oldTransform);
Java图片处理开源框架Thumbnailator
Java图⽚处理开源框架Thumbnailator图⽚处理是当今软件开发中⾮常重要的⼀环,然⽽处理图⽚的开源框架却并不多。
现⾦⽹上流传的Java处理图⽚的代码,虽然可对图⽚进⾏简单处理,但效果并不理想。
虽然也有些其他解决⽅案,但都摆脱不了繁琐,使⽤起来⼗分不⽅便。
为了解决这个问题,我也是在⽹上找了好久,看了很多资料,功夫不负有⼼⼈,最终找到了⼀个处理图⽚⼗分棒的开源框架。
特此拿出来与⼤家分享。
Thumbnailator 是⼀个优秀的图⽚处理的Google开源Java类库。
处理效果远⽐Java API的好。
从API提供现有的图像⽂件和图像对象的类中简化了处理过程,两三⾏代码就能够从现有图⽚⽣成处理后的图⽚,且允许微调图⽚的⽣成⽅式,同时保持了需要写⼊的最低限度的代码量。
还⽀持对⼀个⽬录的所有图⽚进⾏批量处理操作。
⽀持的处理操作:图⽚缩放,区域裁剪,⽔印,旋转,保持⽐例。
另外值得⼀提的是,Thumbnailator⾄今仍不断更新,怎么样,感觉很有保障吧!下⾯我们介绍下如何使⽤Thumbnailator原图:1、指定⼤⼩进⾏缩放//size(宽度, ⾼度)/** 若图⽚横⽐200⼩,⾼⽐300⼩,不变* 若图⽚横⽐200⼩,⾼⽐300⼤,⾼缩⼩到300,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼩,横缩⼩到200,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼤,图⽚按⽐例缩⼩,横为200或⾼为300*/Thumbnails.of("images/a380_1280x1024.jpg").size(200, 300).toFile("c:/a380_200x300.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(2560, 2048).toFile("c:/a380_2560x2048.jpg");2、按照⽐例进⾏缩放//scale(⽐例)Thumbnails.of("images/a380_1280x1024.jpg").scale(0.25f).toFile("c:/a380_25%.jpg");Thumbnails.of("images/a380_1280x1024.jpg").scale(1.10f).toFile("c:/a380_110%.jpg");3、不按照⽐例,指定⼤⼩进⾏缩放//keepAspectRatio(false)默认是按照⽐例缩放的Thumbnails.of("images/a380_1280x1024.jpg").size(200,200).keepAspectRatio(false).toFile("c:/a380_200x200.jpg");4、旋转//rotate(⾓度),正数:顺时针负数:逆时针Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).rotate(90).toFile("c:/a380_rotate+90.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).rotate(-90).toFile("c:/a380_rotate-90.jpg");5、⽔印//watermark(位置,⽔印图,透明度)Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).watermark(Positions.BOTTOM_RIGHT,ImageIO.read(newFile("images/watermark.png")),0.5f) .outputQuality(0.8f).toFile("c:/a380_watermark_bottom_right.jpg");Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).watermark(Positions.CENTER,ImageIO.read(newFile("images/watermark.png")),0.5f).outputQuality(0.8f).toFile("c:/a380_watermark_center.jpg");6、裁剪//sourceRegion()//图⽚中⼼400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.CENTER,400,400).size(200,200).keepAspectRatio(false).toFile("c:/a380_region_center.jpg");//图⽚右下400*400的区域Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(Positions.BOTTOM_RIGHT,400,400).size(200,200).keepAspectRatio(false).toFile("c:/a380_region_bootom_right.jpg");//指定坐标Thumbnails.of("images/a380_1280x1024.jpg").sourceRegion(600,500,400,400).size(200,200).keepAspectRatio(false).toFile("c:/a380_region_coord.jpg");7、转化图像格式//outputFormat(图像格式)Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).outputFormat("png").toFile("c:/a380_1280x1024.png");Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).outputFormat("gif").toFile("c:/a380_1280x1024.gif");8、输出到OutputStream//toOutputStream(流对象)OutputStreamos=newFileOutputStream("c:/a380_1280x1024_OutputStream.png"); Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).toOutputStream(os);9、输出到BufferedImage//asBufferedImage()返回BufferedImageBufferedImagethumbnail=Thumbnails.of("images/a380_1280x1024.jpg").size(1280,1024).asBufferedImage();ImageIO.write(thumbnail,"jpg",newFile("c:/a380_1280x1024_BufferedImage.jpg"));以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java后台解决上传图片翻转90的问题,有demo,经过测试可用
java后台解决上传图⽚翻转90的问题,有demo,经过测试可⽤1.需要加⼊依赖metadata-extractor.jar依赖如下<dependencies><!-- Extracts Exif, IPTC, XMP, ICC and other metadata from image and video files(从图像和视频⽂件中提取EXIF、IPTC、XMP、ICC和其他元数据) --><dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.11.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>2.主要看⼯具类,ImageUtil,因为是mvc上传图⽚,所以之前参数我参考别⼈代码改了⼀下.package com.huarui.util;import java.awt.Dimension;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import com.drew.imaging.ImageMetadataReader;import com.drew.imaging.ImageProcessingException;import com.drew.metadata.Directory;import com.drew.metadata.Metadata;import com.drew.metadata.Tag;public class ImageUtil {public static Map<String, Object> getExif(InputStream inputStream) {Map<String, Object> map = new HashMap<String, Object>();try {Metadata metadata = ImageMetadataReader.readMetadata(inputStream);map = printExif(metadata);} catch (ImageProcessingException e) {System.out.println(e.getMessage());} catch (IOException e) {System.out.println(e.getMessage());}return map;}// 获取exif信息,将旋转⾓度信息拿到private static Map<String, Object> printExif(Metadata metadata) {Map<String, Object> map = new HashMap<String, Object>();String tagName = null;String desc = null;for (Directory directory : metadata.getDirectories()) {for (Tag tag : directory.getTags()) {tagName = tag.getTagName();desc = tag.getDescription();if (tagName.equals("Orientation")) {map.put("Orientation", desc);}}}return map;}public static int getAngle(Map<String, Object> map) {int ro = 0;if(map.get("Orientation")!=null) {String ori = map.get("Orientation").toString();if (ori.indexOf("90") >= 0) {ro = 1;} else if (ori.indexOf("180") >= 0) {ro = 2;} else if (ori.indexOf("270") >= 0) {ro = 3;}}return ro;}public static BufferedImage getBufferedImg(BufferedImage src,int width, int height, int ro) {int angle = (int) (90 * ro);int type = src.getColorModel().getTransparency();int wid = width;int hei = height;if (ro % 2 != 0) {int temp = width;width = height;height = temp;}Rectangle re = new Rectangle(new Dimension(width, height));BufferedImage BfImg = null;BfImg = new BufferedImage(re.width, re.height, type);Graphics2D g2 = BfImg.createGraphics();g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.rotate(Math.toRadians(angle), re.width / 2,re.height / 2);g2.drawImage(src, (re.width - wid) / 2, (re.height - hei) / 2, null);g2.dispose();return BfImg;}//获得图⽚的⾼public static int getHeight(InputStream is) {BufferedImage src = null;int height = -1;try {src = ImageIO.read(is);height = src.getHeight();} catch (Exception e) {System.out.println(e.getMessage());}return height;}//获得图⽚的宽public static int getWidth(InputStream is) {BufferedImage src = null;int width = -1;try {src = ImageIO.read(is);width = src.getWidth();} catch (Exception e) {System.out.println(e.getMessage());}return width;}}3.Ctrollerpackage com.huarui.action;import com.huarui.util.ImageUtil;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;@Controllerpublic class UploadController {@RequestMapping("/upload")public @ResponseBody String fileUpload(MultipartFile file) throws IOException {File localFile = new File("e://a.jpg");String ex = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//图⽚翻转90int angle = ImageUtil.getAngle(ImageUtil.getExif(file.getInputStream()));BufferedImage bf =ImageUtil.getBufferedImg(ImageIO.read(file.getInputStream()), ImageUtil.getWidth(file.getInputStream()), ImageUtil.getHeight(file.getInputStream()), angle); ImageIO.write(bf, ex.substring(1), localFile);//度问题return localFile.getAbsolutePath();}@RequestMapping("/")public String index(){return "test";}}亲测有效,附上链接->。
javascript:一个2D旋转图的实现
javascript:⼀个2D旋转图的实现 今天从图书馆回寝室的路上,突然灵感迸发,想做⼀个旋转图(2D),于是就有了下⽂。
⾸先说⼀下思路吧,我觉得做程序最重要的就是思路了,思路对了,代码那就是⼿到拈来。
-_-! 1、 CSS布局: 我采⽤了4长图⽚,在CSS设置⾥,他并不是绝对定位。
2、采⽤布局转换:在javascript中设置img的position:absolute,同时加上他们的left和top; 3、当点击按钮开始时,开始进⾏旋转。
4、旋转时的逻辑是,由当前图⽚的索引,运动到下⼀张图⽚的索引位置。
特别注意的是: 最后⼀张应该运到到第⼀张的位置,也就是aImg[0]的位置. 5、还有⼀点也很重要。
那就是层级z-index. 这⾥我采⽤⼀个办法。
设置了⼀个变量times,每当点击的时候,times就+1,这样我们就能知道每张图⽚应该在的位置,相应的索引值也应该改变. 那么怎么获取图⽚所在的位置呢? 其实aImg[i]所在的位置,就是原来aImg[(i+times)%aImg.length]所在的位置了(关键在于取模)。
第⼀次也博客,书写和表达可能不太清楚,⼤家见谅,以下为js代码部分:1 window.onload = function(){2var MyApp = {3 dom: {4 aImg: document.getElementsByTagName('img'),5 oBtn: document.getElementById('btn')6 },7 times: 0,8 Switch: true,9 First: true10 };11 absoluted(MyApp.dom.aImg);12 setPosition(MyApp.dom.aImg[0], 200, 200, 2);13 setPosition(MyApp.dom.aImg[1], 351, 300, 3);14 setPosition(MyApp.dom.aImg[2], 502, 200, 2);15 setPosition(MyApp.dom.aImg[3], 351, 122, 1);16 MyApp.dom.oBtn.onclick = function(){17if(MyApp.Switch||MyApp.First){18 MyApp.Switch = false;19 MyApp.First = false;20var a = MyApp.dom;21 MyApp.times++;22for(var i=0;i<a.aImg.length;i++){23 a.aImg[i].style.zIndex = a.aImg[(i+MyApp.times)%a.aImg.length].index;24 }25 changePosition(a.aImg, function(){26 MyApp.Switch = true;27 });28 }29 }30 }31function setPosition(obj, left, top, index){32 obj.style.left = left + 'px';33 obj.style.top = top + 'px';34 obj.style.zIndex = index;35 obj.index = index;36 }37function changePosition(wrap, fn){38for(var i=0;i<wrap.length;i++){39if(i==3){40 MOVE:Buffer_Move(wrap[3],{left: wrap[0].offsetLeft, top: wrap[0].offsetTop});41 }else{42 MOVE:Buffer_Move(wrap[i],{left: wrap[i+1].offsetLeft, top: wrap[i+1].offsetTop}, fn);43 }44 }45 }46function absoluted(wrap){47for(var i=0;i<wrap.length;i++){48 wrap[i].style.left = wrap[i].offsetLeft + 'px';49 wrap[i].style.top = wrap[i].offsetTop + 'px';50 }51for(var i=0;i<wrap.length;i++){52 wrap[i].style.position = 'absolute';53 }54 }另外可能有些同学会问这个MOVE:Buffer_Move是什么东西,其实,这是我写的⼀个运动框架,有缓冲和弹性运动。
javascript结合canvas实现图片旋转效果
javascript结合canvas实现图⽚旋转效果我们在微博上可以对图⽚进⾏向左转向右转等旋转操作,让⽤户可以从不同的视⾓欣赏图⽚效果。
本⽂将结合实例为您讲解如何使⽤Javascript结合相关技术来实现图⽚的旋转效果。
我们使⽤HTML5的canvas标签可对图⽚进⾏旋转操作,对于ie6,7,8不⽀持HTML5的浏览器,我们使⽤IE特有的滤镜效果来实现图⽚旋转。
HTML我们在页⾯中放置⼀张图⽚,在图⽚的上⽅放置两个按钮,通过onclick事件调⽤rotate()函数来控制图⽚向左向右旋转。
<div id="tool"><a href="#" id="arr_left" onclick="rotate('myimg','left')">向左</a><a href="#" id="arr_right" onclick="rotate('myimg','right')">向右</a></div><div id="img"><img src="demo.jpg" width="460" height="305" alt="" id="myimg" /></div>Javascriptfunction rotate(obj,arr){var img = document.getElementById(obj);if(!img || !arr) return false;var n = img.getAttribute('step');if(n== null) n=0;if(arr=='left'){(n==0)? n=3:n--;}else if(arr=='right'){(n==3)? n=0:n++;}img.setAttribute('step',n);...}我们写了个⾃定义函数rotate(),其中参数obj表⽰要旋转的图⽚对象的id,参数arr表⽰旋转⽅向,固定两个值:left(向左)和right(向右)。
java 移动原点以及图形旋转
java 移动原点以及图形旋转让某个图形旋转一个角度,其旋转中心是当前上下文的原点。
默认情况下原点在(0,0)处,而大多数情况下我们都需要自己设置图形旋转中心,因此我们需要将原点移动到理想位置。
1.移动原点移动原点需要调用Graphics2D类对象的translate(int x, int y)。
其中,x与y表示新原点的坐标。
注意上述示例中两个椭圆的y坐标位置,一个是50,另一个是250。
绘制效果如图11-2所示。
图11-2 绘制两个同列的椭圆下面是移动原点的情况下绘制两个椭圆的示例。
这两个椭圆的y坐标设置成一样,如果没有发生原点移动,那么这两个椭圆将在位置上发生重叠。
而事实上,由于在绘制第二个椭圆之前,原点被移动到(0,200)处,所以,后面的坐标值将以(0,200)为参照点。
例如y坐标值50,其实际效果就相当于没有移动原点情况下的250。
因此,上述示例的绘制效果图与图11-2所示的效果图一模一样。
2.图形旋转旋转图形需要调用Graphics2D类对象的rotate()方法,该方法有如下两种重载形式。
●V oid rotate(double theta) theta表示旋转的角度,单位为弧度。
●V oid rotate(double theta , double x , double y) theta表示旋转的角度,单位为弧度;x与y指定旋转时的原点坐标。
使用void rotate(double theta , double x , double y)方法时,当前上下文中的原点坐标不会改变,该方法的调用效果相当于:也就是说,先将原点移动到(x,y)处,旋转一定角度后,又将原点移回去。
Rotate()方法事实上是旋转了x与y轴,也就是说,发生旋转后,上下文中的x 与y轴发生了旋转。
所以,在接下来设置坐标值时需要考虑到x轴与y轴已经发生了改变。
例如,假设原点坐标为默认值(0,0),有一个椭圆为new Ellipse2D.Double(0, 0, 200, 150),其起点坐标为(0,0)、宽为200、高为150,在默认情况下的图形按逆时针旋转90º后如图11-3所示。
Im4java操作ImageMagick处理图片
Im4java操作ImageMagick处理图⽚背景之前⽤的是JMagick,各种限制各种坑,直到使⽤了Im4java,真是相当的好⽤啊。
项⽬描述ImageMagic的安装可参考:Im4java是ImageMagick的第⼆个java接⼝。
它不是JMagick的替代品,⽽是作为补充。
JMagick是ImageMagick C-API之上的瘦JNI层。
相⽐之下,im4java只为ImageMagick命令⽣成命令⾏,并将⽣成的命令⾏传递给选定的IM 命令(使⽤ng.ProcessBuilder.start() - ⽅法)。
im4java的缺点:您仅限于IM命令的功能。
使⽤JMagick,您可以访问IM的低级接⼝,所以您可以⾮常详细地控制图像处理。
图像处理会有更好的表现。
im4java的优点:IM命令⾏的界⾯⾮常稳定,因此你的java程序(和im4java-library)可以在很多版本的IM上运⾏。
im4java还提供了更好的OO接⼝(IM命令⾏的“语⾔”,其后缀操作符号很容易转换为OO符号)。
最重要的是:你可以在任何地⽅使⽤im4java,⽽JMagick在某些地⽅会因为JNI的危险性⽽⽆法使⽤(例如java应⽤程序服务器)。
注意事项我⽤的ImageMagick版本是ImageMagick-7.0.8-12-Q16-x64-dll.exe,安装完后发现安装⽬录⾥只有个 magick.exe 命令。
程序⾥直接使⽤convert,composite,identify的时候都会报错,提⽰⽂件找不到。
新版本使⽤这些命令必须先写上 magick 命令才⾏,⽐如这样 magick convert xxxx。
原因可能是ImageMagick版本更新了,但是Im4java版本没更新(Im4java版本是1.4.0),导致出现不兼容的情况,解决办法很简单,直接把 magick.exe 复制三份,重命名为其他三个命令就可以了,实测可⽤。
graphics2d rotate 函数说明
一、Graphics2D rotate 函数的基本介绍Graphics2D 是 Java 2D 图形类的基础类之一,用于绘制图形、文本和图片。
其中的 rotate 函数是用来实现图形旋转的功能,通过调用该函数可以实现对图形的任意角度旋转。
在本文中,我们将详细介绍rotate 函数的使用方法和原理,帮助读者更好地理解和应用该函数。
二、rotate 函数的语法和参数rotate 函数的语法如下所示:public void rotate(double theta)该函数接受一个 double 类型的参数 theta,表示旋转角度,单位为弧度。
当theta为正值时,表示顺时针旋转;当theta为负值时,表示逆时针旋转。
三、rotate 函数的使用方法1. 创建 Graphics2D 对象在调用 rotate 函数之前,我们首先需要创建一个 Graphics2D 对象,并将其绑定到需要进行图形旋转的图形上下文上。
创建 Graphics2D 对象的代码示例如下:Graphics2D g2d = (Graphics2D) g;2. 调用 rotate 函数实现旋转一旦创建了 Graphics2D 对象,就可以通过调用 rotate 函数来实现图形旋转的功能。
我们可以通过以下代码实现对一个矩形的旋转:g2d.rotate(Math.toRadians(45));3. 绘制旋转后的图形在调用 rotate 函数之后,所有后续的绘图操作都将受到旋转的影响。
我们可以通过以下代码绘制一个旋转后的矩形:g2d.drawRect(100, 100, 200, 100);四、rotate 函数的原理解析rotate 函数实际上是通过矩阵变换来实现图形的旋转。
在调用 rotate 函数时,会根据传入的旋转角度 theta 构造一个旋转矩阵,然后将该矩阵应用到当前的绘图上下文中。
通过矩阵变换,可以将图形按照指定的角度进行旋转,而不改变其原始形状和大小。
微信小程序实现图片翻转效果的实例代码
微信⼩程序实现图⽚翻转效果的实例代码⽼规矩,先上图:页⾯:<view class='rotateCtn' bindtap='rotateFn'><!--正⾯的框 --><view class='frame {{class1}}'><image src="{{vo.cover1}}"></image></view><!--背⾯的框 --><view class='frame {{class2}}'><image src="{{vo.cover2}}"></image></view></view>代码:data: {class1: 'z1', //默认正⾯在上⾯class2: 'z2'},rotateFn: function(e) {let data = this.data;if (data.class1 == 'z1' && data.class2 == 'z2') {this.run('front', 'back', 'z2', 'z1');} else {this.run('back', 'front', 'z1', 'z2');}},run: function(a, b, c, d) {let that = this;that.setData({class1: a,class2: b,})setTimeout(function() {that.setData({class1: c,class2: d,})}, 1000);},还有样式:page{position: relative;height: 100%;background-color: #F6F6F6}.rotateCtn{position: absolute;width: 70%;height: 70%;left: 15%;bottom: 20%;transform-style:preserve-3d;}.frame{position: absolute;height: 100%;width: 100%;}.frame image{height: 100%;width: 100%;border-radius: 8px;}.front{animation:front 1s linear 1;backface-visibility: hidden;}.back{animation:back 1s linear 1;}@keyframes front{from{transform: rotateY(0deg);} to{transform: rotateY(180deg);}}@keyframes back{from{transform: rotateY(-180deg);} to{transform: rotateY(0deg);}}.z1{z-index:6}.z2{z-index:5}总结以上所述是⼩编给⼤家介绍的微信⼩程序实现图⽚翻转效果的实例代码,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
java的affinetransform的rotate方法
java的affinetransform的rotate方法全文共四篇示例,供读者参考第一篇示例:AffineTransform是Java中用于进行图形变换的类,它提供了一系列方法可以对图形进行平移、缩放、旋转等操作。
其中rotate方法是用来实现旋转的,通过该方法可以将图形按照指定的角度进行旋转。
rotate方法的语法如下:```javapublic void rotate(double theta)```theta是旋转的角度,单位为弧度。
正值表示顺时针旋转,负值表示逆时针旋转。
在实际使用中,可以通过AffineTransform的实例对象调用rotate方法来对图形进行旋转。
下面通过一个简单的示例来演示如何使用rotate方法来实现图形的旋转:```javaimport java.awt.*;import java.awt.geom.*;上面的示例中,通过rotate方法将矩形按照45度进行了顺时针旋转,最终绘制出旋转后的矩形。
除了rotate(double theta) 方法外,AffineTransform 类还提供了其他一些相关的方法用于实现旋转操作。
可以使用以下方法实现围绕指定点进行旋转:```javapublic void rotate(double theta, double anchorx, double anchory)```(anchorx, anchory) 是旋转的中心点坐标。
需要注意的是,AffineTransform 类的图形变换是基于原始图形的变换,因此旋转后的图形与原始图形大小相同,只是方向发生了变化。
如果需要改变图形的尺寸,还需要另外进行缩放操作。
AffineTransform类提供了丰富的方法用于实现图形的变换,其中rotate方法是实现旋转操作的重要方法之一。
通过合理使用rotate 方法,可以轻松实现图形的旋转效果。
希望这篇文章对你了解Java的AffineTransform类的rotate方法有所帮助。
java实现图片任意角度旋转
java实现图⽚任意⾓度旋转本⽂实例为⼤家分享了Java实现图⽚旋转,供⼤家参考,具体内容如下⽅法⼀:普通⽅法实现图⽚旋转/*** 图像旋转* @param src* @param angel* @return*/public static BufferedImage Rotate(Image src, double angel) {int src_width = src.getWidth(null);int src_height = src.getHeight(null);// calculate the new image sizeRectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage res = null;res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_3BYTE_BGR);Graphics2D g2 = res.createGraphics();// transformg2.translate((rect_des.width - src_width) / 2,(rect_des.height - src_height) / 2);g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);g2.drawImage(src, null, null);return res;}public static Rectangle CalcRotatedSize(Rectangle src, double angel) {// if angel is greater than 90 degree, we need to do some conversionif (angel >= 90) {if(angel / 90 % 2 == 1){int temp = src.height;src.height = src.width;src.width = temp;}angel = angel % 90;}double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;double angel_dalta_width = Math.atan((double) src.height / src.width);double angel_dalta_height = Math.atan((double) src.width / src.height);int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_width));len_dalta_width=len_dalta_width>0?len_dalta_width:-len_dalta_width;int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha- angel_dalta_height));len_dalta_height=len_dalta_height>0?len_dalta_height:-len_dalta_height;int des_width = src.width + len_dalta_width * 2;int des_height = src.height + len_dalta_height * 2;des_width=des_width>0?des_width:-des_width;des_height=des_height>0?des_height:-des_height;return new java.awt.Rectangle(new Dimension(des_width, des_height));}⽅法⼆:opencv实现图⽚旋转/*** opencv实现图⽚旋转* @param splitImage* @param angle* @return*/public static Mat rotate3(Mat splitImage, double angle){double thera = angle * Math.PI / 180;double a = Math.sin(thera);double b = Math.cos(thera);int wsrc = splitImage.width();int hsrc = splitImage.height();int wdst = (int) (hsrc * Math.abs(a) + wsrc * Math.abs(b));int hdst = (int) (wsrc * Math.abs(a) + hsrc * Math.abs(b));Mat imgDst = new Mat(hdst, wdst, splitImage.type());Point pt = new Point(splitImage.cols() / 2, splitImage.rows() / 2);// 获取仿射变换矩阵Mat affineTrans = Imgproc.getRotationMatrix2D(pt, angle, 1.0);System.out.println(affineTrans.dump());// 改变变换矩阵第三列的值affineTrans.put(0, 2, affineTrans.get(0, 2)[0] + (wdst - wsrc) / 2);affineTrans.put(1, 2, affineTrans.get(1, 2)[0] + (hdst - hsrc) / 2);Imgproc.warpAffine(splitImage, imgDst, affineTrans, imgDst.size(),Imgproc.INTER_CUBIC | Imgproc.WARP_FILL_OUTLIERS);return imgDst;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
计算机图形学--旋转变换(java)
计算机图形学--旋转变换(java)import java.awt.Color;import java.awt.Frame;import java.awt.Graphics;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.*;public class Rotates extends Frame {public void lanch() {this.setSize(640, 480);this.setVisible(true);this.addWindowListener(new MyWindowMonitor());}class MyWindowMonitor extends WindowAdapter {public void windowClosing(WindowEvent e) {setVisible(false);System.exit(0);}}public void paint(Graphics g) {g.translate(320, 240);int[] A={0,0,20};int[] B={0,100,50};for(int n=0;n<720;n+=40){double[][] r={ {Math.cos(n*3.14/180),Math.sin(n*3.14/180),0}, {-Math.sin(n*3.14/180),Math.cos(n*3.14/180),0},{0, 0, 1}};int[][] a;a=new int[][]{{0,0,1},{0,100,1},{20,50,1}};if(n>=360){a=new int[][]{{0,0,1},{0,100,1},{-20,50,1}};}int[][] zz;zz=new int[3][3];for(int i=0;i<3;i++){for(int j=0;j<3;j++){for(int k=0;k<3;k++){zz[i][j]+=a[i][k]*r[k][j];}}}int[] aa=new int[3];int[] bb=new int[3];for(int i=0;i<3;i++){aa[i]=(int)zz[i][0];bb[i]=(int)zz[i][1];}if(n>=360){try {Thread.sleep(1000);//延时函数} catch (InterruptedException e) {e.printStackTrace();}g.setColor(Color.red);g.fillPolygon(aa, bb,3);}else{try {Thread.sleep(1000);//延时函数} catch (InterruptedException e) {e.printStackTrace();}g.setColor(Color.BLUE);g.fillPolygon(aa, bb, 3);}}}public static void main(String[] args) {new Rotates().lanch();}}疯狂Java培训(疯狂软件学院官网www点fkjava点org)专注软件开发培训,提升学员就业能力,重点提升实践动手能力。
Java像处理实现视觉效果的炫酷应用
Java像处理实现视觉效果的炫酷应用Java是一种高级编程语言,广泛应用于各类软件开发中。
由于其强大的图形处理和图像处理能力,Java在实现视觉效果的炫酷应用方面具有巨大的潜力。
本文将探讨Java在处理视觉效果时的应用,并介绍一些炫酷应用的实例。
一、Java图形处理库Java提供了丰富的图形处理库,使得开发者可以方便地实现各种图形效果。
其中最知名的是JavaFX,它是一个现代化的用于建立富互联网应用程序的JAVA库,并具有出色的图形渲染能力。
JavaFX提供了多种图形效果的实现方式,如渐变、阴影、光照效果等。
开发者可以通过简单的代码实现复杂的视觉效果,使得应用程序更加引人注目。
二、视觉效果的实现1. 渐变效果渐变效果是一种常用的视觉效果,可以通过色彩的渐变来实现平滑过渡。
JavaFX提供了LinearGradient和RadialGradient等类,可以帮助开发者实现各种渐变效果。
通过设置渐变的起止颜色和渐变方式,可以轻松地为应用程序添加炫酷的渐变效果。
2. 阴影效果阴影效果可以为图像或文本添加深度感,并使其在屏幕上凸显出来。
JavaFX中的DropShadow类可以用来实现阴影效果。
通过设置阴影的颜色、模糊度和偏移量,开发者可以轻松地为应用程序中的元素添加炫酷的阴影效果。
3. 光照效果光照效果可以使图像或文本看起来更加逼真。
JavaFX中的Lighting 类可以用于实现各种光照效果。
开发者可以通过设置光照的位置、颜色和强度,为应用程序中的元素添加炫酷的光照效果,使其看起来更加立体感和真实感。
三、炫酷应用实例1. 3D游戏Java的图形处理能力使得它成为开发3D游戏的理想语言。
通过JavaFX的3D API,开发者可以轻松地构建复杂的三维场景,并实现逼真的光照、阴影和纹理效果。
这些炫酷的视觉效果可以为游戏增添沉浸感和视觉享受,提高玩家的游戏体验。
2. 图像编辑器Java的图像处理库提供了各种强大的功能,使得它成为开发图像编辑器的理想语言。
SpringBoot2.x整合thumbnailator图片处理的示例代码
SpringBoot2.x整合thumbnailator图⽚处理的⽰例代码1、序在实际项⽬中,有时为了响应速度,难免会对⼀些⾼清图⽚进⾏⼀些处理,⽐如图⽚压缩之类的,⽽其中压缩可能就是最为常见的。
最近,阿淼就被要求实现这个功能,原因是客户那边嫌速度过慢。
借此机会,阿淼今⼉就给⼤家介绍⼀些⼀下我做这个功能时使⽤的Thumbnailator库。
Thumbnailator是⼀个优秀的图⽚处理的 Google 开源 Java 类库,专门⽤来⽣成图像缩略图的,通过很简单的 API 调⽤即可⽣成图⽚缩略图,也可直接对⼀整个⽬录的图⽚⽣成缩略图。
两三⾏代码就能够从现有图⽚⽣成处理后的图⽚,且允许微调图⽚的⽣成⽅式,同时保持了需要写⼊的最低限度的代码量。
可毫不夸张的说,它是⼀个处理图⽚⼗分棒的开源框架。
⽀持:图⽚缩放,区域裁剪,⽔印,旋转,保持⽐例。
有了这玩意,就不⽤在费⼼思使⽤ Image I/O API,Java 2D API 等等来⽣成缩略图了。
废话少说,直接上代码,先来看⼀个最简单的例⼦:2、代码⽰例2.1. 新建⼀个springboot项⽬2.2. 引⼊依赖 thumbnailator<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>2.3. controller主要实现了如下⼏个接⼝作为测试:@RestControllerpublic class ThumbnailsController {@Resourceprivate IThumbnailsService thumbnailsService;/*** 指定⼤⼩缩放* @param resource* @param width* @param height* @return*/@GetMapping("/changeSize")public String changeSize(MultipartFile resource, int width, int height) {return thumbnailsService.changeSize(resource, width, height);}/*** 指定⽐例缩放* @param resource* @param scale* @return*/@GetMapping("/changeScale")public String changeScale(MultipartFile resource, double scale) {return thumbnailsService.changeScale(resource, scale);}/*** 添加⽔印 watermark(位置,⽔印,透明度)* @param resource* @param p* @param shuiyin* @param opacity* @return*/@GetMapping("/watermark")public String watermark(MultipartFile resource, Positions p, MultipartFile shuiyin, float opacity) {return thumbnailsService.watermark(resource, Positions.CENTER, shuiyin, opacity);}/*** 图⽚旋转 rotate(度数),顺时针旋转* @param resource* @param rotate* @return*/@GetMapping("/rotate")public String rotate(MultipartFile resource, double rotate) {return thumbnailsService.rotate(resource, rotate);}/*** 图⽚裁剪* @param resource* @param p* @param width* @param height* @return*/@GetMapping("/region")public String region(MultipartFile resource, Positions p, int width, int height) {return thumbnailsService.region(resource, Positions.CENTER, width, height);}}3、功能实现其实引⼊了这个Thumbnailator类库后,代码其实很少,因为我们只需要按照规则调⽤其 API 来实现即可。
javaswing类中控制旋转的方法
(原创实用版4篇)编制人员:_______________审核人员:_______________审批人员:_______________编制单位:_______________编制时间:____年___月___日序言下面是本店铺为大家精心编写的4篇《javaswing类中控制旋转的方法》,供大家借鉴与参考。
下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(4篇)《javaswing类中控制旋转的方法》篇1在 Java Swing 中,可以使用`javax.swing.JRotator`类来控制组件的旋转。
`JRotator`类允许将组件旋转一定角度,它可以旋转任意角度,包括正数和负数。
下面是一个简单的示例代码,演示如何使用`JRotator`类来控制按钮的旋转:```javaimport javax.swing.*;import java.awt.*;public class RotatorExample {public static void main(String[] args) {JFrame frame = new JFrame("Rotator Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel = new JPanel();panel.setLayout(new GridLayout(2, 2));JButton button1 = new JButton("Button 1");JButton button2 = new JButton("Button 2");JButton button3 = new JButton("Button 3");JButton button4 = new JButton("Button 4");// 将按钮旋转 45 度button1.setRotation(45);// 将按钮旋转 -45 度button2.setRotation(-45);// 将按钮旋转 90 度button3.setRotation(90);// 将按钮旋转 270 度button4.setRotation(270);panel.add(button1);panel.add(button2);panel.add(button3);panel.add(button4);frame.getContentPane().add(panel);frame.pack();frame.setLocationByPlatform(true);frame.setVisible(true);}}```在上面的示例代码中,我们创建了一个`JPanel`,并将四个`JButton`添加到该面板中。
Java实现图片翻转以及任意角度旋转
Java实现图⽚翻转以及任意⾓度旋转最近⼏天在做⼀个项⽬,因为涉及到了图⽚(绝⼤部分都不是整图,是把⼀张张的⼤图切成⼩图,也就是Title)的翻转以及90°旋转,弄得焦头烂额。
在⽹上搜索好⼏天,发现⽤到的⽅法都是⽐较公式化的,对于只是在绘图的时候需要显⽰翻转⽽不需要另外⽣成图⽚的情况,这些代码⽤起来⾮常的⿇烦。
最后仔细的研究了⼀下JDK⽂档,⽤Graphics2D很简单的就实现了以下功能:1、图⽚的翻转,包括⽔平翻转以及垂直翻转2、图⽚的任意⾓度旋转。
因为⼯程需要,代码⾥⾯都直接写成了+90,根据需要,可以对这个值进⾏改动,以符合需求。
3、可以使⽤组合操作,⽐如⽔平翻转+旋转,或者垂直+⽔平+旋转,任意。
以下是代码:package Demo628;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;public class ImageRote{public static void main(String[] args){JFrame frame = new TransformFrame();frame.setVisible(true);}}class TransformFrame extends JFrame implements ActionListener{//添加⼏个按钮⽅便操作。
JButton rote = new JButton("旋转") ;JButton flipX= new JButton("⽔平翻转");JButton flipY= new JButton("垂直翻转");JButton zoomIn = new JButton("放⼤") ;JButton zoomOut = new JButton("缩⼩") ;public TransformFrame(){setTitle("TransformTest");setSize(400, 400);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});Container contentPane = getContentPane();canvas = new TransPanel();contentPane.add(canvas, "Center");JPanel buttonPanel = new JPanel();buttonPanel.add(rote);rote.addActionListener(this);buttonPanel.add(flipX);flipX.addActionListener(this);buttonPanel.add(flipY);flipY.addActionListener(this);buttonPanel.add(zoomIn) ;zoomIn.addActionListener(this) ;buttonPanel.add(zoomOut) ;zoomOut.addActionListener(this) ;contentPane.add(buttonPanel, "North");}public void actionPerformed(ActionEvent event){Object source = event.getSource();//对于source == 这种⽅法,在特殊的情况下出现错误,所以,需要酌情使⽤event.getSource().equals()⽅法来替代==if (source == rote){canvas.setRotate();} elseif (source == flipX){canvas.flipX();} elseif (source == flipY){canvas.flipY();} elseif (source == zoomIn){canvas.zoomIn();} elseif (source == zoomOut){canvas.zoomOut();}}private TransPanel canvas;}class TransPanel extends JPanel{//⽔平翻转⽐例的标志。