java图片裁剪和java生成缩略图

合集下载

java实现图片像素质量压缩与图片长宽缩放

java实现图片像素质量压缩与图片长宽缩放

java实现图⽚像素质量压缩与图⽚长宽缩放⽬录java 图⽚像素质量压缩与图⽚长宽缩放java 修改图⽚dpi(像素/⼤⼩)java 图⽚像素质量压缩与图⽚长宽缩放今天找到的这个⽅法⽐以前项⽬⽤到的⽅法更好,这⾥记录下,⽅便⽇后使⽤!/*** 缩放图⽚(压缩图⽚质量,改变图⽚尺⼨)* 若原图宽度⼩于新宽度,则宽度不变!* @param newWidth 新的宽度* @param quality 图⽚质量参数 0.7f 相当于70%质量* 2015年12⽉11⽇*/public static void resize(File originalFile, File resizedFile,int newWidth, float quality) throws IOException {if (quality > 1) {throw new IllegalArgumentException("Quality has to be between 0 and 1");}ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());Image i = ii.getImage();Image resizedImage = null;int iWidth = i.getWidth(null);int iHeight = i.getHeight(null);if(iWidth < newWidth){newWidth = iWidth;}if (iWidth > iHeight) {resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)/ iWidth, Image.SCALE_SMOOTH);} else {resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,newWidth, Image.SCALE_SMOOTH);}// This code ensures that all the pixels in the image are loaded.Image temp = new ImageIcon(resizedImage).getImage();// Create the buffered image.BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),temp.getHeight(null), BufferedImage.TYPE_INT_RGB);// Copy image to buffered image.Graphics g = bufferedImage.createGraphics();// Clear background and paint the image.g.setColor(Color.white);g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));g.drawImage(temp, 0, 0, null);g.dispose();// Soften.float softenFactor = 0.05f;float[] softenArray = { 0, softenFactor, 0, softenFactor,1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };Kernel kernel = new Kernel(3, 3, softenArray);ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);bufferedImage = cOp.filter(bufferedImage, null);// Write the jpeg to a file.FileOutputStream out = new FileOutputStream(resizedFile);// Encodes image as a JPEG data streamJPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);param.setQuality(quality, true);encoder.setJPEGEncodeParam(param);encoder.encode(bufferedImage);} // Example usagepublic static void main(String[] args) throws IOException {// File originalImage = new File("C:\\11.jpg");// resize(originalImage, new File("c:\\11-0.jpg"),150, 0.7f);// resize(originalImage, new File("c:\\11-1.jpg"),150, 1f);File originalImage = new File("d:\\testImg\\1.jpg");System.out.println("源⽂件⼤⼩" + originalImage.length());// File resizedImg = new File("d:\\testImg\\11.jpg");// resize(originalImage, resizedImg, 850, 1f);// System.out.println("0.5转换后⽂件⼤⼩" + resizedImg.length());// File resizedImg1 = new File("d:\\testImg\\111.jpg");File resizedImg1 = new File("/alidata/zkyj/dashixiong/tempImgFile/11.jpg");resize(originalImage, resizedImg1, 1550, 0.7f);System.out.println("0.7转换后⽂件⼤⼩" + resizedImg1.length());}java 修改图⽚dpi(像素/⼤⼩)import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class DPIHandleHelper {private static int DPI = 300;public static void main(String[] args) {String path = "C:\\test.jpg";File file = new File(path);handleDpi(file, 300, 300);}/*** 改变图⽚DPI** @param file* @param xDensity* @param yDensity*/public static void handleDpi(File file, int xDensity, int yDensity) {try {BufferedImage image = ImageIO.read(file);JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file)); JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);jpegEncodeParam.setQuality(0.75f, false);jpegEncodeParam.setXDensity(xDensity);jpegEncodeParam.setYDensity(yDensity);jpegEncoder.encode(image, jpegEncodeParam);image.flush();} catch (IOException e) {e.printStackTrace();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

java中图片上传+预览+剪切解决方案

java中图片上传+预览+剪切解决方案

java中图片上传+预览+剪切解决方案我们在很多网站可以看到上传图片后可以剪切,下面我来介绍一个java中图片上传+预览+剪切解决方案吧,有需要的朋友可参考参考。

表现流程如下:步骤1:点击浏览按钮选中图片-------1------>onchange事件把图片上传到服务器-------2----->图片路径回传步骤2:进入切割图片------3----->切割,取得坐标,长度--------4---->传给服务器---------->后台切割产生新图片-----5------>回传新图路径步骤3:页面截图预览步骤1:file标签:onchange事件调用的js方法:ajaxFileUpload利用iframe模拟了ajax上传文件。

url:"uploadPreviewImage.html" 就是后台地址,(本人使用的是spring mvc),success:function (data , status),上传成功后调用的js中,$('#photo').imgAreaSelect方法是使用了imgAreaSelect插件来初始化截图界面。

官网地址:/projects/imgareaselect/关于ajaxFileUpload的api可以查看官网,开始的时候我使用的是网上随便下的一个js,发现一直调不同,最后换了官网的,才ok。

var f=document.getElementById("advImage").value;if(!/.(gif|jpg|jpeg|png|JPG|PNG)$/.test(f)){alert("图片类型必须是.jpeg,jpg,png中的一种")return false;}// 利用ajaxFileUpload js 插件上传图片$.ajaxFileUpload({url:"uploadPreviewImage.html",secureuri:false,fileElementId:"advImage",dataType:"json",success:function (data , status) {//上传成功后,直接跳出截图框,使用imgAreaSelect插件piso = $('#photo').imgAreaSelect({x1: 0, y1: 0, x2:480 , y2: 520 ,onSelectEnd: preview,resizable: false,instance: true,persistent:true});// 这个方法是现实一个div,托住截图框showCutImage();// 一些变量在页面的隐藏input的设置document.getElementById("photo").src = data.tempPath;document.getElementById("currentPath").valu e = data.tempPath;},error:function (data, status, e) {//alert("图片上传失败,请重新选择图片");}});return false;}// 截图选中后调用方法,保存好起始坐标和宽高function preview(img, selection){$('#x1').val(selection.x1);$('#y1').val(selection.y1);$('#x2').val(selection.x2);$('#y2').val(selection.y2);$('#w').val(selection.width);$('#h').val(selection.height);} uploadPreviewImage方法,把文件方法零时文件夹下:public ModelAndView uploadPreviewImage(HttpServletRequest request, HttpServletResponse response) throws IOException{User user = (User)request.getSession().getAttribute("user");MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;MultipartFile image = multipartRequest.getFile("advImage");response.setCharacterEncoding(BusinessConstants.ENC OD_UTF);response.setHeader("ContentType", "json");PrintWriter out = response.getWriter();// 组合零时图片名String imageName = image.getOriginalFilename();String file_ext = imageName.substring(stIndexOf(BusinessConstants.DOT) + 1);SimpleDateFormat df = new SimpleDateFormat(BusinessConstants.DATE_FORMAT);String tempImageName = user.getId() +BusinessConstants.UNDERLINE + df.format(new Date()) + BusinessConstants.DOT + file_ext;// 存放浏览图片的零时文件路径File file = new File(request.getSession().getServletContext().getRealPath(Business Constants.TEMP_PICTURE_PATH +tempImageName));byte[] advImageBytes = null;InputStream advImageStream = null;try {file.createNewFile();advImageStream = image.getInputStream();advImageBytes = FileCopyUtils.copyToByteArray(advImageStream);FileCopyUtils.copy(advImageBytes, file);advImageStream.close();} catch (IOException e) {e.printStackTrace();}String tempPath = BusinessConstants.TEMP_RELATIVE_PICTURE_PATH +tempImageName;// 传给页面相对路径out.print("{");out.print("tempPath:'"+tempPath+"',");out.print("msg:''");out.print("}");out.flush();out.close();// ajaxreturn null;}上面的uploadPreviewImage调用完成后就会把下面的div显示出来(初始隐藏):这就是截图界面啦!<input id="h" type="hidden" /></div><input type="button" id="cutImage" name="cutImage" class="btton-queren" onclick="cutImage()" style="float: right;" value="保存"/></div>步骤2:我们可以看到截图完毕后点击保存,就会调用cutImage方法:里面我们利用dwr调用ReleaseService的cutImage方法。

JAVA生成缩略小图片类

JAVA生成缩略小图片类
int rate=0;
boolean proportion=true; //是否等比缩放标记(默认为等比缩放)
public Small_pic(){
//初始化变量
InputDir="";
OutputDir="";
InputFileName="";
OutputFileName="";
this.OutputHeight=OutputHeight;
}
public void setW_H(int width,int height){
this.OutputWidth=width;
this.OutputHeight=height;
}
public String s_pic(){
this.InputDir=InputDir;
//输出图路径
this.OutputDir=OutputDir;
//输入图文件名
this.InputFileName=InputFileName;
//输出图文件名
this.OutputFileName=OutputFileName;
//设置图片长宽
* 本java类能将jpg图片文件,进行等比或非等比的大小转换
* 具体使用方法
* s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
*/
public class Small_pic{
String InputDir; //输入图路径
encoder.encode(buffImg);

Java图像编辑器

Java图像编辑器

Java图像编辑器- 允许用户打开、编辑和保存图像文件在本博客中,我们将创建一个基本的Java图像编辑器,它允许用户打开、编辑和保存图像文件。

这个图像编辑器将使用Java的Swing库来构建用户界面,并使用Java的ImageIO库来处理图像文件。

目录简介项目设置构建用户界面打开图像文件编辑图像保存图像文件运行图像编辑器总结1. 简介图像编辑器是一个常见的应用程序,用于处理和修改图像文件。

本项目将展示如何使用Java编写一个基本的图像编辑器,其中包括以下功能:打开图像文件:用户可以打开现有的图像文件。

编辑图像:用户可以进行基本的图像编辑,如裁剪、旋转和调整亮度/对比度。

保存图像文件:用户可以保存编辑后的图像为新文件。

我们将使用Java的Swing库构建用户界面,并使用Java 的ImageIO库来处理图像文件。

2. 项目设置首先,您需要准备好Java开发环境。

您可以安装JDK(Java Development Kit)并设置Java编程环境。

确保您的开发环境可以编译和运行Java应用程序。

接下来,创建一个新的Java项目,并确保您的项目包含Swing库和ImageIO库。

这两个库在Java标准库中,通常不需要额外安装。

3. 构建用户界面在我们开始编写Java代码之前,让我们首先构建用户界面。

我们将使用Swing库来创建一个简单的图像编辑器窗口,其中包括菜单栏、工具栏和图像显示区域。

javaCopy codeimport javax.swing.*;import java.awt.*;public class ImageEditor extends JFrame {private JMenuBar menuBar;private JMenu fileMenu;private JMenuItem openMenuItem;private JMenuItem saveMenuItem;private JToolBar toolBar;private JButton cropButton;private JButton rotateButton;private JButton brightnessButton;private JLabel imageLabel;public ImageEditor() {setTitle("Java图像编辑器");setSize(800, 600); setDefaultCloseOperation(EXIT_ON_CLOSE);menuBar = new JMenuBar();fileMenu = new JMenu("文件"); openMenuItem = new JMenuItem("打开"); saveMenuItem = new JMenuItem("保存"); fileMenu.add(openMenuItem);fileMenu.add(saveMenuItem);menuBar.add(fileMenu);setJMenuBar(menuBar);toolBar = new JToolBar();cropButton = new JButton("裁剪"); rotateButton = new JButton("旋转"); brightnessButton = new JButton("亮度/对比度"); toolBar.add(cropButton);toolBar.add(rotateButton);toolBar.add(brightnessButton);add(toolBar, BorderLayout.NORTH);imageLabel = new JLabel();add(imageLabel, BorderLayout.CENTER);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {ImageEditor editor = new ImageEditor();editor.setVisible(true);});}}以上代码创建了一个ImageEditor类,该类继承自JFrame,并包含菜单栏、工具栏和图像显示区域。

图片裁剪(java版)

图片裁剪(java版)

图片裁剪(java版)图片裁剪(java版)一、功能说明1. 图片裁剪,矩形方式裁剪原图的某一部分2. 可设置裁剪的起始位置,左边距和上边距(默认为0)3. 可设置裁剪的宽高(默认为原始尺寸- 裁剪起始位置) 5. 注意事项. 图片输出到本地. 为防止内存溢出,请增大jvm内存(推荐-Xmx1024m). 可处理20M左右(10000 ×10000)超高清图片二、代码1.原代码import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.image.BufferedImage;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.imageio.stream.ImageInputStream;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/*** 图片截剪*图片输出到本地.*gif 图片只输出第一帧图片.*为防止内存溢出,请增大jvm内存(推荐-Xmx1024m). *可处理20M左右大图片.** @author lily200825* @date 2011-6-1*/public class ImageCutUtil {// 输出打印日志public static boolean IS_DEBUG = true;/**** @param srcImg* 原图片路径* 输出图片路径* @param left* 左边距* @param top* 上边距* @param width* 截剪宽度* @param height* 截剪高度* @return* @throws IOException*/public static boolean cutImage(String srcImg, String destImg, int left,int top, Integer width, Integer height) throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片截剪:输出图片路径[" + destImg + "]错误。

java处理图片按比例缩放功能

java处理图片按比例缩放功能

java处理图⽚按⽐例缩放功能java中的图⽚按⽐例缩放功能1. 按固定长宽进⾏缩放/** 图⽚缩放,w,h为缩放的⽬标宽度和⾼度* src为源⽂件⽬录,dest为缩放后保存⽬录*/public static void zoomImage(String src,String dest,int w,int h) throws Exception {double wr=0,hr=0;File srcFile = new File(src);File destFile = new File(dest);BufferedImage bufImg = ImageIO.read(srcFile); //读取图⽚Image Itemp = bufImg.getScaledInstance(w, h, bufImg.SCALE_SMOOTH);//设置缩放⽬标图⽚模板wr=w*1.0/bufImg.getWidth(); //获取缩放⽐例hr=h*1.0 / bufImg.getHeight();AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wr, hr), null);Itemp = ato.filter(bufImg, null);try {ImageIO.write((BufferedImage) Itemp,dest.substring(stIndexOf(".")+1), destFile); //写⼊缩减后的图⽚} catch (Exception ex) {ex.printStackTrace();}}2. 按固定⽂件⼤⼩进⾏缩放/** 图⽚按⽐率缩放* size为⽂件⼤⼩*/public static void zoomImage(String src,String dest,Integer size) throws Exception {File srcFile = new File(src);File destFile = new File(dest);long fileSize = srcFile.length();if(fileSize < size * 1024) //⽂件⼤于size k时,才进⾏缩放,注意:size以K为单位return;Double rate = (size * 1024 * 0.5) / fileSize; // 获取长宽缩放⽐例BufferedImage bufImg = ImageIO.read(srcFile);Image Itemp = bufImg.getScaledInstance(bufImg.getWidth(), bufImg.getHeight(), bufImg.SCALE_SMOOTH);AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(rate, rate), null);Itemp = ato.filter(bufImg, null);try {ImageIO.write((BufferedImage) Itemp,dest.substring(stIndexOf(".")+1), destFile);} catch (Exception ex) {ex.printStackTrace();}}。

java生成缩略图

java生成缩略图

最近公司说要在portal中添加一个上传图片并生成缩略图的方法,试了很久,终于搞定了;写下点心得吧,使大家少走弯路;首先做之前,google了一下,发现很多生产缩略图的方法:Java代码1.BufferedImage img = ImageIO.read(file);2. int h = img.getHeight();3. int w = img.getWidth();4.5. if(h>=96 && w >=96){6. int nw = 96;7. int nh = (nw * h) / w;8. if(nh>96) {9. nh = 96;10. nw = (nh * w) / h;11. }12. ByteArrayOutputStream out = new ByteArrayOutputStream();13. BufferedImage dest = new BufferedImage(nw,nh, BufferedImage.TYPE_INT_RGB);14. dest.getGraphics().drawImage(img,0,0,nw, nh,null);15. ImageIO.write(dest, "jpeg", out);16. imageThumbnail = out.toByteArray();17. }18. else{19. imageThumbnail = imageData;20. }但是使用后发现,对于底色是透明的图片,生成的缩略图是别的颜色的,于是找原因,发现jpeg是最大的祸首;现在修改代码:Java代码1.BufferedImage img = ImageIO.read(file);2. int h = img.getHeight();3. int w = img.getWidth();4.5. if(h>=96 && w >=96){6. int nw = 96;7. int nh = (nw * h) / w;8. if(nh>96) {9. nh = 96;10. nw = (nh * w) / h;11. }12. ByteArrayOutputStream out = new ByteArrayOutputStream();13. BufferedImage dest = new BufferedImage(nw,nh,BufferedImage.TYPE_4BYTE_ABGR);14. dest.getGraphics().drawImage(img,0,0,nw, nh,null);15. GifEncoder.encode(dest, out);16. //ImageIO.write(dest, "gif", out);17. imageThumbnail = out.toByteArray();18. }19. else{20. imageThumbnail = imageData;21. }其中使用了GifEncoder这也类,对应的jar包就是gif89.jar,这是个开源的包,做了修改,去掉了恶心的公司logo,现在生成的缩略图没有问题了,连gif 的动画也能缩略,强啊用Java缩小一个股票图片总是失真,造成了好多锯齿状,文字不清晰,K图也断断续续的了。

Java实现图片压缩代码,图片大小转换

Java实现图片压缩代码,图片大小转换

Java实现图⽚压缩代码,图⽚⼤⼩转换在很多项⽬中我们会把上传的图⽚做处理,⽐较图⽚上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的⾼清图⽚,我们可以通过代码来做压缩。

在我的项⽬中我们压缩图⽚的⽬的是让web页⾯打开的速度很快,并且节省空间。

下⾯先分享⼀下代码:package org.util;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class ImgTools {/*** 按照宽⾼⽐例压缩** @param img* @param width* @param height* @param out* @throws IOException*/public static void thumbnail_w_h(File img, int width, int height,OutputStream out) throws IOException {BufferedImage bi = ImageIO.read(img);double srcWidth = bi.getWidth(); // 源图宽度double srcHeight = bi.getHeight(); // 源图⾼度double scale = 1;if (width > 0) {scale = width / srcWidth;}if (height > 0) {scale = height / srcHeight;}if (width > 0 && height > 0) {scale = height / srcHeight < width / srcWidth ? height / srcHeight: width / srcWidth;}thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out);}/*** 按照固定宽⾼原图压缩** @param img* @param width* @param height* @param out* @throws IOException*/public static void thumbnail(File img, int width, int height,OutputStream out) throws IOException {BufferedImage BI = ImageIO.read(img);Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.setColor(Color.RED);g.drawImage(image, 0, 0, null); // 绘制处理后的图g.dispose();ImageIO.write(tag, "JPEG", out);}/*** 按照宽⾼裁剪** @param srcImageFile* @param destWidth* @param destHeight* @param out*/public static void cut_w_h(File srcImageFile, int destWidth,int destHeight, OutputStream out) {cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out);}public static void cut_w_h(File srcImageFile, int x, int y, int destWidth,int destHeight, OutputStream out) {try {Image img;ImageFilter cropFilter;// 读取源图像BufferedImage bi = ImageIO.read(srcImageFile);int srcWidth = bi.getWidth(); // 源图宽度int srcHeight = bi.getHeight(); // 源图⾼度if (srcWidth >= destWidth && srcHeight >= destHeight) {Image image = bi.getScaledInstance(srcWidth, srcHeight,Image.SCALE_DEFAULT);cropFilter = new CropImageFilter(x, y, destWidth, destHeight);img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));BufferedImage tag = new BufferedImage(destWidth, destHeight,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(img, 0, 0, null); // 绘制截取后的图g.dispose();// 输出为⽂件ImageIO.write(tag, "JPEG", out);}} catch (Exception e) {e.printStackTrace();}}// #cut_w_hpublic static void main(String[] args) throws IOException {File img = new File("e:\\a\\a.jpg");FileOutputStream fos = new FileOutputStream("e:\\a\\b.jpg");// ImgTools.thumbnail(img, 100, 100, fos);// ImgTools.cut_w_h(img, 230, 200, fos);ImgTools.thumbnail_w_h(img, 100, 0, fos);}}其实我们很多⼈喜欢在上传的时候就做了限制了,这样在上传时就节省了带宽,可是很多客户是不会做图⽚处理的,5M的⼤图直接就给你上传,限制了说我们做的不⼈性化。

java实现图片分割指定大小

java实现图片分割指定大小

java实现图⽚分割指定⼤⼩本⽂实例为⼤家分享了java实现图⽚分割指定⼤⼩的具体代码,供⼤家参考,具体内容如下1.使⽤⼯具:ThumbnailsThumbnails 是由⾕歌提供的图⽚处理包,⽬前版本0.4.8。

可以简洁的实现图⽚的缩放、压缩、旋转、⽔印、格式转换等操作。

2.引⼊maven<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>//最新版本可⾃查3.⼯具类import org.springframework.web.multipart.MultipartFile;import net.coobird.thumbnailator.Thumbnails;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.IOException;/*** @Auther: lch* @Date: 2019/3/11 09:58* @Description: 图⽚⼯具类*/public class ImgUtils {public static byte[] uploadImg(Integer height,Integer width,MultipartFile file) throws Exception{String fileSuffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);BufferedImage bufferedImageBig = Thumbnails.of(file.getInputStream()).forceSize(height, width).asBufferedImage();//⼤图字节转换ByteArrayOutputStream outBig = new ByteArrayOutputStream();try {ImageIO.write(bufferedImageBig, fileSuffix, outBig);} catch (IOException e) {e.printStackTrace();}return outBig.toByteArray();}}4.切割图⽚返回字节数组/*** 接收⽂件*** @param model* @return* @throws IOException* @throws IllegalStateException*/@RequestMapping(value = "imageupload")public void imageUpload(MultipartFile file) throws IllegalStateException, IOException {//⽂件名称String realFileName = file.getOriginalFilename();//⽂件后缀String suffix = realFileName.substring(stIndexOf(".") + 1);/***************⽂件处理*********************/try {//⼤图图⽚切割 --宽⾼ 720 - 720byte[] bytesBig = ImgUtils.uploadImg(720, 720, file);//中图图⽚切割 --宽⾼ 200 - 200byte[] bytesMiddle = ImgUtils.uploadImg(200, 200, file);//⼩图图⽚切割 --宽⾼ 50- 50byte[] bytesSmall = ImgUtils.uploadImg(50, 50, file);/************以上三种byte数组,即为切割后的⽂件******************/} catch (Exception e) {System.out.println("错误");}}⼩编再为⼤家补充⼀段相关代码:java图⽚切割圆形@Testpublic void test() {try {// 读取图⽚BufferedImage bi1 = ImageIO.read(new File("g:/free-sheet-share.jpg"));BufferedImage bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(),BufferedImage.TYPE_INT_RGB);Ellipse2D.Double shape = new Ellipse2D.Double(0, 0, bi1.getWidth(), bi1.getHeight());Graphics2D g2 = bi2.createGraphics();g2.setBackground(Color.WHITE);g2.fill(new Rectangle(bi2.getWidth(), bi2.getHeight()));g2.setClip(shape);//设置抗锯齿g2.drawImage(bi1, 0, 0, null);g2.dispose();ImageIO.write(bi2, "jpg", new File("e:/2.jpg"));} catch (IOException e) {e.printStackTrace();}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

java生成缩略图 +图片水印+文字水印

java生成缩略图 +图片水印+文字水印

java生成缩略图+图片水印+文字水印package com.thinblue.test1;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;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;/*** @author Eric Xu**/public final class ImageUtils {/*** 图片水印* @param pressImg 水印图片* @param targetImg 目标图片* @param x 修正值默认在中间* @param y 修正值默认在中间* @param alpha 透明度*/public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {try {File img = new File(targetImg);Image src = ImageIO.read(img);int wideth = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();g.drawImage(src, 0, 0, wideth, height, null);//水印文件Image src_biao = ImageIO.read(new File(pressImg));int wideth_biao = src_biao.getWidth(null);int height_biao = src_biao.getHeight(null);g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,g.drawImage(src_biao, (wideth - wideth_biao) , (height - height_biao), wideth_biao, height_biao, null);//水印文件结束g.dispose();ImageIO.write((BufferedImage) image, "jpg", img);} catch (Exception e) {e.printStackTrace();}}/*** 文字水印* @param pressText 水印文字* @param targetImg 目标图片* @param fontName 字体名称* @param fontStyle 字体样式* @param color 字体颜色* @param fontSize 字体大小* @param x 修正值* @param y 修正值* @param alpha 透明度*/public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha) {try {File img = new File(targetImg);Image src = ImageIO.read(img);int width = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();g.drawImage(src, 0, 0, width, height, null);g.setColor(color);g.setFont(new Font(fontName, fontStyle, fontSize));g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);g.dispose();ImageIO.write((BufferedImage) image, "jpg", img);} catch (Exception e) {e.printStackTrace();}/*** 缩放* @param filePath 图片路径* @param height 高度* @param width 宽度* @param bb 比例不对时是否需要补白*/public static void resize(String filePath, int height, int width, boolean bb) {try {double ratio = 0.0; //缩放比例File f = new File(filePath);BufferedImage bi = ImageIO.read(f);Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);//计算比例if ((bi.getHeight() > height) || (bi.getWidth() > width)) {if (bi.getHeight() > bi.getWidth()) {ratio = (new Integer(height)).doubleValue() / bi.getHeight();} else {ratio = (new Integer(width)).doubleValue() / bi.getWidth();}AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);itemp = op.filter(bi, null);}if (bb) {BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();g.setColor(Color.white);g.fillRect(0, 0, width, height);if (width == itemp.getWidth(null))g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);elseg.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);g.dispose();itemp = image;}ImageIO.write((BufferedImage) itemp, "jpg", f);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException {pressImage("f:\\imgtest\\sy.gif", "f:\\imgtest\\test1.jpg", 0, 0, 1f);//pressText("我是文字水印", "G:\\imgtest\\test1.jpg", "黑体", 36, Color.white, 80, 0, 0, 0.3f);//resize("G:\\imgtest\\test1.jpg", 500, 500, true);}public static int getLength(String text) {int length = 0;for (int i = 0; i < text.length(); i++) {if (new String(text.charAt(i) + "").getBytes().length > 1) {length += 2;} else {length += 1;}}return length / 2;}}。

thumbnails 实现原理

thumbnails 实现原理

thumbnails 实现原理
Thumbnails是一个用于生成图像缩略图的Java库。

它的实现原理主要包括以下几个步骤:
1. 打开原始图像文件:使用Java的ImageIO包中的read()方法打开原始图像文件,并将其加载到内存中。

2. 调整图像大小:通过使用Java 2D API中的AffineTransform 类创建一个变换矩阵,将原始图像的像素坐标映射到新的坐标系上,从而实现图像大小的调整。

3. 缩放图像:使用Java 2D API中的RescaleOp类对图像进行缩放操作。

该类接受一个源图像、一个目标尺寸和一个缩放因子作为输入,并返回一个缩放后的新图像。

4. 裁剪图像:如果需要,可以使用Java的ImageIO包中的read()方法读取原始图像的一个子区域,从而得到一个缩略图。

5. 保存缩略图:使用Java的ImageIO包中的write()方法将缩略图保存到磁盘上。

总的来说,Thumbnails库通过使用Java的内置图像处理API,实现了快速、高效的图像缩略图生成。

java图片上传剪切图片整套实现方法(2)

java图片上传剪切图片整套实现方法(2)

java图片上传剪切图片整套实现方法(2)html页面:2、上传好图片后,要根据自己的需要进行剪切,处理方法为://剪切图片public String clippingPicture(){HttpServletRequest request = ServletActionContext.getRequest();HttpSession session = request.getSession();try{String powerStr = session.getAttribute("power").toString();int power=0;if(powerStr==null){request.setAttribute("failMsg", "异常操作,用户已退出,请重新登录!");return "login";}else{power = Integer.parseInt(powerStr);}if(power==2){//对图片进行剪切处理Driver_detail detail = dds.getDriver_detailByDriverId(driverId);String pimgurl = detail.getImageUrl();//要删除的图片绝对路径String savePath = ServletActionContext.getServletContext().getRealPath("");// 获取项目根路径savePath = savePath.replace("\", "\\\\");savePath = savePath + "\\\\uploadImages\\\\";String imgAbl = savePath+pimgurl;OperateImage o = new OperateImage( x , y , width , height );o.setSrcpath(imgAbl);o.setSubpath(imgAbl);o.cut();//对图片进行缩放处理Driver_detail detail1 = dds.getDriver_detailByDriverId(driverId);String pimgurl1 = detail1.getImageUrl();//要删除的图片绝对路径String savePath1 = ServletActionContext.getServletContext().getRealPath("");// 获取项目根路径savePath1 = savePath1.replace("\", "\\\\");savePath1 = savePath1 + "\\\\uploadImages\\\\";String imgAbl1 = savePath1+pimgurl1;Resize r= new Resize();BufferedImage b;b = ImageIO.read(new FileInputStream(imgAbl1));BufferedImage bb = r.rize(b,100,100);ImageIO.write(bb, "jpg" , new File(imgAbl1));return "showDriversAction";}else{request.setAttribute("failMsg", "异常操作,用户已退出,请重新登录!");return "login";}}catch (CannotCreateTransactionException e) {request.setAttribute("failMsg", "数据库连接失败,请联系管理员");return "login";}catch (HibernateException e) {request.setAttribute("failMsg", "更改司机头像出错,请重新操作");return "showDriversAction";}catch (Exception e) {request.setAttribute("failMsg", "更改司机头像出错,请重新操作");return "showDriversAction";}}在方法中用到了几个关键的类:OperateImage.java剪切图片类:package mobi.zhangsheng.jiejia.util;import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.Iterator;import javax.imageio.ImageIO;import javax.imageio.ImageReadParam;import javax.imageio.ImageReader;import javax.imageio.stream.ImageInputStream;import pany_detail;import org.apache.struts2.ServletActionContext;public class OperateImage {// ===源图片路径名称如:c:\1.jpgprivate String srcpath;// ===剪切图片存放路径名称。

java压缩图片(只缩小体积,不更改图片尺寸)的示例

java压缩图片(只缩小体积,不更改图片尺寸)的示例

java压缩图⽚(只缩⼩体积,不更改图⽚尺⼨)的⽰例1.情景展⽰ 在调⽤腾讯⾝份证OCR接⼝的时候,由于要求图⽚⼤⼩只能限制在1MB以内,这样,就必须使⽤到图⽚压缩技术2.代码展⽰/*** 图⽚处理⼯具类* @explain* @author Marydon* @creationTime 2019年9⽉3⽇上午10:14:17* @version 1.0* @since* @email marydon20170307@*/public class ImgUtils {/*** 压缩图⽚(通过降低图⽚质量)* @explain 压缩图⽚,通过压缩图⽚质量,保持原图⼤⼩* @param quality* 图⽚质量(0-1)* @return byte[]* 压缩后的图⽚(jpg)* @throws*/public static byte[] compressPicByQuality(byte[] imgByte, float quality) {byte[] imgBytes = null;try {ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);BufferedImage image = ImageIO.read(byteInput);// 如果图⽚空,返回空if (image == null) {return null;}// 得到指定Format图⽚的writer(迭代器)Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");// 得到writerImageWriter writer = (ImageWriter) iter.next();// 得到指定writer的输出参数设置(ImageWriteParam )ImageWriteParam iwp = writer.getDefaultWriteParam();// 设置可否压缩iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);// 设置压缩质量参数iwp.setCompressionQuality(quality);iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);ColorModel colorModel = ColorModel.getRGBdefault();// 指定压缩时使⽤的⾊彩模式iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));// 开始打包图⽚,写⼊byte[]// 取得内存输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();IIOImage iIamge = new IIOImage(image, null, null);// 此处因为ImageWriter中⽤来接收write信息的output要求必须是ImageOutput// 通过ImageIo中的静态⽅法,得到byteArrayOutputStream的ImageOutputwriter.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));writer.write(null, iIamge, iwp);imgBytes = byteArrayOutputStream.toByteArray();} catch (IOException e) {System.out.println("write errro");e.printStackTrace();}return imgBytes;}}3.其它代码 import mons.codec.binary.Base64;String imgBase64 = "";try {// 图⽚⼤⼩超过1MBif (file.getSize()/1024 > 1024) {byte[] imgBytes = pressPicByQuality(file.getBytes(),0.1F);imgBase64 = Base64.encodeBase64String(imgBytes);} else {imgBase64 = Base64.encodeBase64String(file.getBytes());}} catch (IOException e1) {e1.printStackTrace();} 说明: ⽣成的base64图⽚没有图⽚格式头,即:data:image/jpeg;base64,4.增加前端代码/*** 拍照或选择图⽚*/this.uploadPicture = function () {// js 获取⽂件对象var fileObj = document.getElementById("file").files[0];if (null == fileObj) {alert("图像上传失败,请重试!");}// TODO 显⽰遮罩// 创建form表单var formFile = new FormData();//加⼊⽂件对象formFile.append("file", fileObj);// 创建XMLHttpRequest 对象var xhr = new XMLHttpRequest();xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true);xhr.onload = function () {var resData = JSON.parse(this.responseText)// 将返回数据转换成JSON对象var json = eval('(' + resData.data2 + ')');// ⾝份证识别成功if (json.ret == 0) {// TODO 将所需数据填充到页⾯} else {alert("识别失败,请重试!" + json.msg);}document.getElementById("file").value = "";// TODO 隐藏遮罩};// 调⽤腾讯接⼝xhr.send(formFile);};以上就是java 压缩图⽚(只缩⼩体积,不更改图⽚尺⼨)的⽰例的详细内容,更多关于java 压缩图⽚的资料请关注其它相关⽂章!。

Java图像处理图片处理和特效实现

Java图像处理图片处理和特效实现

Java图像处理图片处理和特效实现Java图像处理图片处理和特效实现Java是一种广泛应用于软件开发的编程语言,它具有强大的图像处理能力。

在现代社会中,图片处理和特效实现已经成为了许多应用领域的必备技术。

本文将介绍Java中实现图片处理和特效的方法和工具。

一、图像处理基础1. 像素操作在Java中,图像是由像素组成的。

每个像素包含了颜色信息。

通过读取和修改像素的颜色值,我们可以实现图像的处理。

在Java中,可以利用BufferedImage类来读取和操作像素。

2. 图像滤镜图像滤镜是一种常见的图像处理技术,它可以改变图像的外观和质感。

Java提供了一系列内置的图像滤镜,例如灰度化、模糊、锐化等。

这些滤镜可以通过使用Java提供的滤镜类和方法来实现。

二、图片处理1. 图片读取和保存在Java中,可以使用ImageIO类中的方法来读取和保存图片。

通过ImageIO类,我们可以将图片文件加载到内存中,并在处理完成后保存为新的图片文件。

2. 图片缩放和裁剪图片缩放和裁剪是常见的图片处理操作。

Java提供了AffineTransform类和BufferedImage类来实现图片的缩放和裁剪。

通过设置缩放和裁剪的参数,我们可以调整图片的大小和比例。

3. 图片旋转和翻转Java提供了AffineTransform类来实现图片的旋转和翻转。

通过设置旋转和翻转的角度和方向,我们可以实现各种不同的效果。

三、图片特效实现1. 图片滤镜效果使用Java的滤镜类和方法,我们可以实现各种图片特效,例如黑白、模糊、浮雕等。

通过组合不同的滤镜效果,我们可以创造出丰富多样的图片特效。

2. 图片融合和叠加通过使用Java提供的AlphaComposite类,我们可以将多张图片融合在一起,创造出新的特效效果。

3. 图片渐变效果Java提供了GradientPaint类和TexturePaint类,可以实现各种渐变和纹理效果。

通过调整参数,我们可以创建出丰富多样的渐变和纹理效果。

java处理图片压缩、裁剪

java处理图片压缩、裁剪

java处理图⽚压缩、裁剪package img;import java.awt.Color;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.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import javax.media.jai.PlanarImage;import mons.io.IOUtils;import com.alibaba.simpleimage.ImageFormat;import com.alibaba.simpleimage.ImageWrapper;import com.alibaba.simpleimage.SimpleImageException;import com.alibaba.simpleimage.render.CropParameter;import com.alibaba.simpleimage.render.ScaleParameter;import com.alibaba.simpleimage.render.WriteParameter;import com.alibaba.simpleimage.render.ScaleParameter.Algorithm;import com.alibaba.simpleimage.util.ImageCropHelper;import com.alibaba.simpleimage.util.ImageReadHelper;import com.alibaba.simpleimage.util.ImageScaleHelper;import com.alibaba.simpleimage.util.ImageWriteHelper;/*** 图⽚的压缩、裁剪*/public class Test {public static void main(String[] args) throws Exception {// 输⼊输出⽂件路径/⽂件String src = "D:\\test\\map.jpg";String dest = "D:\\test\\map1.jpg";File srcFile = new File(src);File destFile = new File(dest);// 将输⼊⽂件转换为字节数组byte[] bytes = getByte(srcFile);// 构造输⼊输出字节流ByteArrayInputStream is = new ByteArrayInputStream(bytes);ByteArrayOutputStream os = new ByteArrayOutputStream();// 处理图⽚zoomAndCut2(is, os, 400, 400);// 将字节输出流写到输出⽂件路径下writeFile(os, destFile);}/*** 按固定长宽进⾏缩放* @param is 输⼊流* @param os 输出流* @param width 指定长度* @param height 指定宽度* @throws Exception*/public static void zoomImage(InputStream is, OutputStream os, int width, int height) throws Exception {//读取图⽚BufferedImage bufImg = ImageIO.read(is);is.close();//获取缩放⽐例double wRatio = width * 1.0/ bufImg.getWidth();double hRatio = height * 1.0 / bufImg.getHeight();AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wRatio, hRatio), null);BufferedImage bufferedImage = ato.filter(bufImg, null);//写⼊缩减后的图⽚ImageIO.write(bufferedImage, "jpg", os);}/*** 按固定⽂件⼤⼩进⾏缩放* @param is 输⼊流* @param os 输出流* @param size ⽂件⼤⼩指定* @throws Exception*/public static void zoomImage(InputStream is, OutputStream os, Integer size) throws Exception {/*FileInputStream的available()⽅法返回的是int类型,当数据⼤于1.99G(2147483647字节)后将⽆法计量,故求取流⽂件⼤⼩最好的⽅式是使⽤FileChannel的size()⽅法,其求取结果与File的length()⽅法的结果⼀致参考:/chaijunkun/article/details/22387305*/int fileSize = is.available();//⽂件⼤于size时,才进⾏缩放。

java 生成图片缩略图

java 生成图片缩略图

java 生成图片缩略图方法一:import javax.imageio.ImageIO;import javax.imageio.IIOException;import java.awt.image.BufferedImage;import java.awt.Image;import java.io.File;import java.awt.image.AffineTransformOp;import java.awt.geom.AffineTransform;public class bbb {public static void main (String argv[]) {try {File fi = new File("c:/image2.jpg"); //大图文件File fo = new File("c:/imgTest.jpg"); //将要转换出的小图文件int nw = 100;/*AffineTransform 类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D坐标的线性映射,保留了线的“直线性”和“平行性”。

可以使用一系列平移、缩放、翻转、旋转和剪切来构造仿射变换。

*/AffineTransform transform = new AffineTransform();BufferedImage bis = ImageIO.read(fi); //读取图片int w = bis.getWidth();int h = bis.getHeight();//double scale = (double)w/h;int nh = (nw*h)/w ;double sx = (double)nw/w;double sy = (double)nh/h;transform.setToScale(sx,sy); //setToScale(double sx, double sy) 将此变换设置为缩放变换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

if (suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase() + ",") < 0) { log.error("Sorry, the image suffix is illegal. the standard image suffix is {}."+ types); return; } // 将FileInputStream 转换为ImageInputStream iis = ImageIO.createImageInputStream(fis); // 根据图片类型获取该种类型的ImageReader ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next(); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); ceRegion(rect); BufferedImage bi = reader.read(0, param); ImageIO.write(bi, suffix, output); ("图片生成成功,请到目录下查看"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fis != null) fis.close(); if (iis != null) iis.close(); } catch (IOExcep(); } } } else { log.warn("the src image is not exist."); } }
// 获取图片后缀 if(imgFile.getName().indexOf(".") > -1) { suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(".") + 1); }// 类型和图片后缀全部小写,然后判断后缀是否合法 if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()) < 0){ log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types); return ; } log.debug("target image's size, width:{}, height:{}.",w,h); Image img = ImageIO.read(imgFile); if(!force){ // 根据原图与要求的缩略图比例,找到最合适的缩略图比例 int width = img.getWidth(null); int height = img.getHeight(null); if((width*1.0)/w < (height*1.0)/h){ if(width > w){ h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0))); log.debug("change image's height, width:{}, height:{}.",w,h); } } else { if(height > h){ w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h/(height*1.0))); log.debug("change image's width, width:{}, height:{}.",w,h); } } } BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = bi.getGraphics(); g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null); g.dispose();
public void cutImage(String srcImg, String destImg, int x, int y, int width, int height) { cutImage(new File(srcImg), destImg, new java.awt.Rectangle(x, y, width, height)); }
String p = imgFile.getPath(); // 将图片保存在原目录并加上前缀 ImageIO.write(bi, suffix, new File(p.substring(0,stIndexOf(File.separator)) + File.separator + prevfix +imgFile.getName())); log.debug("缩略图在原路径下生成成功"); } catch (IOException e) { log.error("generate thumbnail image failed.",e); } }else{ log.warn("the image is not exist."); } } public static void main(String[] args) { new ImageUtil().thumbnailImage("C:/Users/cm/Desktop/我的页 面/images/girlNoImg.jpg", 100, 150,DEFAULT_PREVFIX,DEFAULT_FORCE); } } 直接运行main方法,填入相对应的参数即可。 二、配合 js 生成裁剪图片 在我们修改个人微博、qq资料的时候可以上传个人头像,并可以剪裁个 人头像然后上传。剪裁图片的大小样式是通过JavaScript实现的,但是它 并不能生成一个新的图片。但是js剪裁图片提供图片的x,y坐标以及宽 高,通过这四个参数我们可以根据原图片生成新的剪裁图片。 步骤: 1、首先通过页面利用js实现图片剪切浏览功能,我参照慕课网提供的资 料并稍微更改了一下。另外我们也可以使用插件,比如Jcrop是款很不错 的图片裁剪插件。 下载地址:/detail/u012385190/9733480
java图片裁剪和java生成缩略图 一、缩略图 在浏览相册的时候,可能需要生成相应的缩略图。 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getLogger(getClass()); private static String DEFAULT_PREVFIX = "thumb_"; private static Boolean DEFAULT_FORCE = false;//建议该值为false /** * <p>Title: thumbnailImage</p> * <p>Description: 根据图片路径生成缩略图 </p> * @param imagePath 原图片路径 * @param w 缩略图宽 * @param h 缩略图高 * @param prevfix 生成缩略图的前缀 * @param force 是否强制按照宽高生成缩略图(如果为false,则生 成最佳比例缩略图) */ public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force){ File imgFile = new File(imagePath); if(imgFile.exists()){ try { // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif] String types = Arrays.toString(ImageIO.getReaderFormatNames()); String suffix = null;
这里写图片描述 最后效果图如上,左侧可以拖动拖拉,右侧是预览图。 2、Java生成并保存剪切图片 public class ImageUtil2 { private Logger log = LoggerFactory.getLogger(getClass()); private static String DEFAULT_CUT_PREVFIX = "cut_"; /** * Description: 根据原图与裁切size截取局部图片 * @param srcImg 源图片 * @param output 图片输出流 * @param rect 需要截取部分的坐标和大小 */ public void cutImage(File srcImg, OutputStream output,java.awt.Rectangle rect) { if (srcImg.exists()) { java.io.FileInputStream fis = null; ImageInputStream iis = null; try { fis = new FileInputStream(srcImg); // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, // JPEG, WBMP, GIF, gif] String types = Arrays.toString(ImageIO.getReaderFormatNames()) .replace("]", ","); String suffix = null; // 获取图片后缀 if (srcImg.getName().indexOf(".") > -1) { suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1); }// 类型和图片后缀全部小写,然后判断后缀是否合法
相关文档
最新文档