Java开源工具Jimi处理图片大小及格式转换
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;}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
java 实现对图片进行指定的缩小或放大
2010-02-02java 实现对图片进行指定的缩小或放大文章分类:Java编程package common.util;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.RenderingHints;import java.awt.geom.AffineTransform;import java.awt.image.BufferedImage;import java.awt.image.ColorModel;import java.awt.image.WritableRaster;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/*** 图片工具类,完成图片的截取** @author inc062977**/public class AlterUploadImage {/*** 实现图像的等比缩放* @param source* @param targetW* @param targetH* @return*/private static BufferedImage resize(BufferedImage source, int targetW,int targetH) {// targetW,targetH分别表示目标长和宽int type = source.getType();BufferedImage target = null;double sx = (double) targetW / source.getWidth();double sy = (double) targetH / source.getHeight();// 这里想实现在targetW,targetH范围内实现等比缩放。
libwebp用法java
libwebp用法javalibwebp是一个开源的图像编码库,可用于将图像转换为WebP格式。
Java是一种广泛使用的编程语言,可以使用libwebp库来实现图像处理功能。
下面是一些关于如何使用libwebp库在Java中处理图像的步骤和示例。
一、准备工作首先,需要确保你的开发环境中已经安装了Java和相关开发工具。
另外,还需要下载并安装libwebp库,并将其添加到Java的类路径中。
二、导入库文件在Java项目中,需要将libwebp库文件导入到项目中。
可以使用以下步骤:1.将libwebp库文件添加到Java项目的类路径中。
通常,可以在开发工具的库文件夹中找到这些文件。
2.在Java代码中导入所需的库文件,例如:```javaimportlibwebp.LibWebP;```三、使用libwebp库下面是一个简单的示例代码,展示了如何使用libwebp库将图像转换为WebP格式:```javaimportlibwebp.LibWebP;importlibwebp.WebP;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;publicclassWebPConverter{publicstaticvoidmain(String[]args){//加载图像文件BufferedImageimage=null;try{image=ImageIO.read(newFile("input.jpg"));}catch(IOExceptione){e.printStackTrace();}if(image==null){System.out.println("无法加载图像文件");return;}//将图像转换为WebP格式并保存为输出文件StringoutputPath="output.webp";WebPwebp=newWebP(image,WebP.UNCOMPRESSED,100);//100表示无损压缩质量为100%byte[]result=null;try{result=LibWebP.encode(webp,LibWebP.ENCODE_WEBP_ALWAYS);//将图像编码为WebP格式并保存结果到byte数组中}catch(Exceptione){e.printStackTrace();}finally{if(result!=null){try{FileoutputFile=newFile(outputPath);//输出文件路径ImageIO.write(image,"webp",outputFile);//将编码后的图像保存到输出文件中}catch(IOExceptione){e.printStackTrace();}finally{LibWebP.free(result);//释放byte数组内存空间}}else{System.out.println("编码失败");}}}}```上述代码中,首先加载了一个输入图像文件,并将其转换为WebP 格式。
java图片处理功能介绍
java图片处理功能介绍java图片处理功能介绍java可实现缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等常用功能,本文是店铺搜索整理的关于java图片处理功能介绍,供参考学习,希望对大家有所帮助!想了解更多相关信息请持续关注我们店铺!代码如下复制代码import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Toolkit;import java.awt.color.ColorSpace;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.awt.image.ColorConvertOp;import java.awt.image.CropImageFilter;import java.awt.image.FilteredImageSource;import java.awt.image.ImageFilter;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/*** 图片处理工具类:<br>* 功能:缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等* @author Administrator*/public class ImageUtils {/*** 几种常见的图片格式*/public static String IMAGE_TYPE_GIF = "gif";// 图形交换格式public static String IMAGE_TYPE_JPG = "jpg";// 联合照片专家组public static String IMAGE_TYPE_JPEG = "jpeg";// 联合照片专家组public static String IMAGE_TYPE_BMP = "bmp";// 英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式public static String IMAGE_TYPE_PNG = "png";// 可移植网络图形public static String IMAGE_TYPE_PSD = "psd";// Photoshop 的专用格式Photoshop/*** 程序入口:用于测试* @param args*/public static void main(String[] args) {// 1-缩放图像:// 方法一:按比例缩放ImageUtils.scale("e:/abc.jpg", "e:/abc_scale.jpg", 2, true);//测试OK// 方法二:按高度和宽度缩放ImageUtils.scale2("e:/abc.jpg", "e:/abc_scale2.jpg", 500, 300, true);//测试OK// 2-切割图像:// 方法一:按指定起点坐标和宽高切割ImageUtils.cut("e:/abc.jpg", "e:/abc_cut.jpg", 0, 0, 400, 400 );//测试OK// 方法二:指定切片的行数和列数ImageUtils.cut2("e:/abc.jpg", "e:/", 2, 2 );//测试OK// 方法三:指定切片的宽度和高度ImageUtils.cut3("e:/abc.jpg", "e:/", 300, 300 );//测试OK// 3-图像类型转换:ImageUtils.convert("e:/abc.jpg", "GIF", "e:/abc_convert.gif");//测试OK// 4-彩色转黑白:ImageUtils.gray("e:/abc.jpg", "e:/abc_gray.jpg");//测试OK// 5-给图片添加文字水印:// 方法一:ImageUtils.pressText("我是水印文字","e:/abc.jpg","e:/abc_pressText.jpg","宋体",Font.BOLD,Color.white,80, 0, 0, 0.5f);//测试OK// 方法二:ImageUtils.pressText2("我也是水印文字", "e:/abc.jpg","e:/abc_pressText2.jpg", "黑体", 36, Color.white, 80, 0, 0, 0.5f);//测试OK// 6-给图片添加图片水印:ImageUtils.pressImage("e:/abc2.jpg","e:/abc.jpg","e:/abc_pressImage.jpg", 0, 0, 0.5f);//测试OK }/*** 缩放图像(按比例缩放)* @param srcImageFile 源图像文件地址* @param result 缩放后的图像地址* @param scale 缩放比例* @param flag 缩放选择:true 放大; false 缩小;*/public final static void scale(String srcImageFile, String result, int scale, boolean flag) {try {BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件int width = src.getWidth(); // 得到源图宽int height = src.getHeight(); // 得到源图长if (flag) {// 放大width = width * scale;height = height * scale;} else {// 缩小width = width / scale;height = height / scale;}Image image = src.getScaledInstance(width, height,Image.SCALE_DEFAULT);BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩小后的图g.dispose();ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流} catch (IOException e) {e.printStackTrace();}}/*** 缩放图像(按高度和宽度缩放)* @param srcImageFile 源图像文件地址* @param result 缩放后的图像地址* @param height 缩放后的高度* @param width 缩放后的宽度* @param bb 比例不对时是否需要补白:true为补白; false为不补白;*/public final static void scale2(String srcImageFile, String result, int height, int width, boolean bb) {try {double ratio = 0.0; // 缩放比例File f = new File(srcImageFile);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, "JPEG", new File(result));} catch (IOException e) {e.printStackTrace();}}/*** 图像切割(按指定起点坐标和宽高切割)* @param srcImageFile 源图像地址* @param result 切片后的图像地址* @param x 目标切片起点坐标X* @param y 目标切片起点坐标Y* @param width 目标切片宽度* @param height 目标切片高度public final static void cut(String srcImageFile, String result, int x, int y, int width, int height) {try {// 读取源图像BufferedImage bi = ImageIO.read(new File(srcImageFile));int srcWidth = bi.getHeight(); // 源图宽度int srcHeight = bi.getWidth(); // 源图高度if (srcWidth > 0 && srcHeight > 0) {Image image = bi.getScaledInstance(srcWidth, srcHeight,Image.SCALE_DEFAULT);// 四个参数分别为图像起点坐标和宽高// 即: CropImageFilter(int x,int y,int width,int height)ImageFilter cropFilter = new CropImageFilter(x, y, width, height);Image img = Toolkit.getDefaultT oolkit().createImage(new FilteredImageSource(image.getSource(),cropFilter));BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(img, 0, 0, width, height, null); // 绘制切割后的图g.dispose();// 输出为文件ImageIO.write(tag, "JPEG", new File(result));}} catch (Exception e) {e.printStackTrace();}}* 图像切割(指定切片的.行数和列数)* @param srcImageFile 源图像地址* @param descDir 切片目标文件夹* @param rows 目标切片行数。
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图片处理解决方案:ImageMagick快速入门
Java图片处理解决方案:ImageMagick快速入门目录•一.ImageMagick介绍•二.ImageMagick快速入门o安装ImageMagicko配置环境变量o使用ImageMagick实现旋转•三.在Java中使用ImageMagicko引入依赖o调用IM4Java实现旋转•四.参考资料•五.关键词一.ImageMagick介绍ImageMagick是一个免费的创建、编辑、合成图片的软件,可以实现图片切割、颜色替换、图片缩略图、图片水印等各种效果。
ImageMagick是免费开源软件,支持大多数操作系统,包括Linux、Windows操作系统。
ImageMagick的大多数功能的使用都来源于命令行工具。
二.ImageMagick快速入门安装ImageMagick到官网下载相应的安装包。
在安装过程中记得勾选Install legacy utilities(e.g. convert)选项。
配置环境变量将ImageMagick安装目录设置到PATH系统变量中打开命令行运行magick -help测试是否配置成功使用ImageMagick实现旋转ImageMagick图片处理命令的格式如下:imagick deal_type origin_pic_path deal_param dest_pic_path •deal_type:图片处理类型。
ImageMagick提供了几十种图片处理类型,包括:decorate(边框)、convert(转换)、montage (拼接)、animation(动画)等,你可以在Features and Capabilities查看更多图片处理类型。
•origin_pic_path:源图片路径。
•deal_param:处理参数。
不同的图片处理类型有不同的处理参数。
•dest_pic_path:目标图片路径。
运行下面的命令将图片顺时针旋转90度:magick doraemon.jpg -rotate 90 doraemon_rotate.jpg三.在Java中使用ImageMagick开始前请先确认JDK、Maven正确安装:引入依赖IM4Java是ImageMagick的Java API包,它将Java代码转化成对ImageMagick的命令行调用。
jimp 使用手册
jimp是一个用Go编写的,功能强大的,性能高效的纯Java图像处理库。
它对图像处理提供了丰富的API接口,方便进行各种图像处理操作。
以下是一份简单的jimp使用手册:1. 安装jimp:首先需要在你的Java项目中引入jimp的依赖。
如果你使用的是Maven,那么可以在pom.xml文件中添加以下依赖:```xml<dependency><groupId>com.github.jimp</groupId><artifactId>jimp</artifactId><version>最新版本</version></dependency>```2. 读取图片:使用jimp的静态方法read()可以读取图片。
例如:```javaJimp image = Jimp.read("input.jpg");```3. 图片处理:jimp提供了丰富的API接口进行各种图片处理操作。
例如,我们可以使用以下代码将图片转为灰度:```javaimage.grayscale();```4. 保存图片:处理完图片后,我们可以使用jimp的write()方法将结果保存为图片。
例如:```javaimage.write("output.jpg");```5. 关闭jimp:使用完jimp后,需要调用其close()方法关闭资源。
例如:```javaimage.close();```以上就是一份简单的jimp使用手册。
jimp还提供了许多其他的功能,如缩放、旋转、裁剪、水印等,具体的使用方法可以参考jimp 的官方文档。
简单像素 midjourney指令
简单像素 midjourney指令一、简单像素 midjourney指令概述简单像素 midjourney指令是一种在计算机编程中常用的指令,用于控制程序在midjourney中的行为。
midjourney是一个开源的图形化处理工具,用于处理像素级图像。
简单像素 midjourney指令可以帮助程序员实现对图像的简单操作,包括裁剪、缩放、旋转、变换等功能。
二、简单像素 midjourney指令的功能1. 裁剪:简单像素 midjourney指令可以实现对图像的裁剪操作,用户可以指定裁剪的区域和大小,从而实现对图像的局部处理。
2. 缩放:通过简单像素 midjourney指令,用户可以实现图像的缩放功能,将图像按照指定的比例进行放大或缩小。
3. 旋转:简单像素 midjourney指令可以帮助用户实现图像的旋转操作,用户可以指定旋转的角度和中心点,实现对图像的旋转处理。
4. 变换:除了上述基本的操作外,简单像素 midjourney指令还可以实现图像的各种变换,包括平移、翻转、透视变换等。
三、简单像素 midjourney指令的应用简单像素 midjourney指令被广泛应用于图像处理、计算机视觉、计算机图形学等领域。
通过简单像素 midjourney指令,用户可以实现对图像的各种处理操作,从而实现图像的美化、编辑、增强等功能。
简单像素midjourney指令也被广泛用于计算机游戏开发、虚拟现实、增强现实等领域,用于实现图像的实时处理和渲染。
四、简单像素 midjourney指令的优势1. 灵活性:简单像素 midjourney指令可以实现对图像的各种处理操作,用户可以根据自己的需求灵活地进行图像处理。
2. 高效性:简单像素 midjourney指令的算法优化和并行处理能力,可以实现对图像的高效处理,满足用户对图像处理的实时性要求。
3. 易用性:简单像素midjourney指令提供了丰富的接口和文档支持,用户可以轻松上手,快速实现对图像的处理操作。
Java将大图片转成小图片
我们经常会将一个小的图片变成小一些的图片,利用java可以方便的实现,而且实现了这个功能后就可以实现更强大的功能,将一个文件夹中的所有图片都变成一个尺寸。
这里提供一个将大图变成小图的方法。
并且提供一个根据这个方法的写好的一个:图片批量尺寸处理器。
可以将一个文件夹下的所有图片,批量的按照一定尺寸都保存到另一个文件夹中。
该工具在操作超大图片的时候会出现内存溢出的错误。
功能简单也没有做太多出错处理,一般情况下挺好用的,大家将就着用吧。
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.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;public class Temp01{private Temp01(){}private void imageOp(InputStream inFile, String outFilePath, int width, int height){Image image = null;try {image = ImageIO.read(inFile);} catch (IOException e) {System.out.println("file path error...");}int originalImageWidth = image.getWidth(null);int originalImageHeight = image.getHeight(null);BufferedImage originalImage = new BufferedImage( originalImageWidth,originalImageHeight,BufferedImage.TYPE_3BYTE_BGR);Graphics2D g2d = originalImage.createGraphics();g2d.drawImage(image, 0, 0, null);BufferedImage changedImage =new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);double widthBo = (double)width/originalImageWidth;double heightBo = (double)width/originalImageHeight; AffineTransform transform = new AffineTransform();transform.setToScale(widthBo, heightBo);AffineTransformOp ato = new AffineTransformOp(transform, null);ato.filter(originalImage, changedImage);File fo = new File(outFilePath); //将要转换出的小图文件try {ImageIO.write(changedImage, "jpeg", fo);} catch (Exception e) {e.printStackTrace();}}private void imageOp(String inFilePath, String outFilePath, int width, int height){File tempFile = new File(inFilePath);Image image = null;try {image = ImageIO.read(tempFile);} catch (IOException e) {System.out.println("file path error...");}int originalImageWidth = image.getWidth(null);int originalImageHeight = image.getHeight(null);BufferedImage originalImage = new BufferedImage(originalImageWidth,originalImageHeight,BufferedImage.TYPE_3BYTE_BGR);Graphics2D g2d = originalImage.createGraphics();g2d.drawImage(image, 0, 0, null);BufferedImage changedImage =new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);double widthBo = (double)width/originalImageWidth;double heightBo = (double)width/originalImageHeight;AffineTransform transform = new AffineTransform();transform.setToScale(widthBo, heightBo);AffineTransformOp ato = new AffineTransformOp(transform, null);ato.filter(originalImage, changedImage);File fo = new File(outFilePath); //将要转换出的小图文件try {ImageIO.write(changedImage, "jpeg", fo);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException { Temp01 t1 = new Temp01();t1.imageOp("C:/p02.jpg", "C:/p03.jpg", 400, 300);InputStream in = new FileInputStream(new File("C:/p02.jpg")); t1.imageOp(in, "C:/p04.jpg", 400, 300);}}。
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实现图⽚分割指定⼤⼩的具体代码,供⼤家参考,具体内容如下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();}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
J2ME插值算法实现图片的放大缩小
J2ME插值算法实现图片的放大缩小作者:阿泉文章来源:本站原创点击数:7649 更新时间:2005-1-26前段时间接触了一些数字图像处理的问题,在1位师兄的指导下,在j2me平台,完成了一些基本的2D图像处理算法。
就当是对这段知识做一下总结,决定把这些算法写出来,和各位朋友共同探讨。
这篇文章先介绍图像放大缩小的实现,程序是以Nokia S40的机器为平台实现的。
1、实现图形缩放的基本思想:图像的变形变换,简单的说就是把源图像每个点坐标通过变形运算转为目标图像相应点的新坐标,但是这样会导致一个问题就是目标点的坐标通常不会是整数。
所以我们在做放大变换时,需要计算生成没有被映射到的点;而在缩小变换时,需要删除一些点。
这里我们采用最简单的一种插值算法:“最近邻域法”。
顾名思义,就是把非整数坐标作一个四舍五入,取最近的整数点。
看下面的一个图片放大的例子,左图为原始图像,右图为放大1倍的图像。
里面的数字,表示所在像素的信息2、对于图片像素的操作:获取Image图片像素信息:标准的midp1.0没有提供获取图片像素信息的函数,对于NOKIA 的机器,我们可以采用Nokia SDK提供的API获取像素信息。
具体程序如下:g = image.getGraphics()DirectGraphics dg = DirectUtils.getDirectGraphics(g); dg.getPixels(short[] pixels, int offset, int scanlength, int x,int y, int width, int height, int format)参数介绍:short[] pixels:用于接收像素信息的数组int offset:这篇文章中的用到的地方,添0就可以了int scanlength:添图片的宽度就行了int x:添0int y:添0int width:图片宽度int height:图片高度int format:444,表示图形格式,好像Nokia S40的机器都是采用444格式表示RGB颜色的。
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 如何改变图片大小的程序代码前面在做项目的时候,有一个需求是需要上传图片的,然而该图片只是简单的展示一些信息,不需要很大,所以在上传图片的时候改变图片的大小就显得很有必要了!然后就写了下面这个方法来改变图片的大小!Java代码1. /**2. * 改变图片的大小到宽为size,然后高随着宽等比例变化3. * @param is 上传的图片的输入流4. * @param os 改变了图片的大小后,把图片的流输出到目标OutputStream5. * @param size 新图片的宽6. * @param format 新图片的格式7. * @throws IOException8. */9. public static void resizeImage(InputStream is, OutputStream os, int size, String format) throws IOException {10. BufferedImage prevImage = ImageIO.read(is);11. double width = prevImage.getWidth();12. double height = prevImage.getHeight();13. double percent = size/width;14. int newWidth = (int)(width * percent);15. int newHeight = (int)(height * percent);16. BufferedImage image = new BufferedImage(newWidth, newHeight,BufferedImage.TYPE_INT_BGR);17. Graphics graphics = image.createGraphics();18. graphics.drawImage(prevImage, 0, 0, newWidth,newHeight, null);19. ImageIO.write(image, format, os);20. os.flush();21. is.close();22. os.close();23. }。
jimp的用法
jimp的用法Jimp是一款用于处理JPEG图像的开源软件,它可以帮助您轻松地提取、编辑和转换JPEG图像文件。
在本文中,我将向您介绍jimp的用法,包括安装、基本操作和高级操作。
一、安装jimp要使用jimp,您需要先将其安装到您的计算机上。
您可以通过以下步骤在您的操作系统上安装jimp:1.打开终端或命令提示符。
2.确保您的系统已安装Java开发工具包(JDK)。
如果您尚未安装JDK,请先安装它。
3.在终端或命令提示符中,使用适当的包管理器(如apt、yum或brew)来安装jimp。
例如,在Ubuntu上,您可以使用以下命令安装jimp:```shellsudoapt-getinstalljimp```在Windows上,您可以从jimp官方网站下载安装程序并按照说明进行安装。
二、基本操作使用jimp,您可以轻松地打开、保存和编辑JPEG图像文件。
以下是一些基本操作示例:1.打开图像文件:使用jimp打开JPEG图像文件,可以使用以下代码:```pythonimportjimpasimgimg.read("path/to/image.jpg")```这将打开指定路径下的JPEG图像文件。
2.保存图像文件:使用jimp保存修改后的JPEG图像文件,可以使用以下代码:```pythonimg.save("path/to/output.jpg")```这将保存修改后的图像文件到指定的路径。
3.裁剪图像:使用jimp裁剪图像,可以使用以下代码:```pythonimg.trim(amount=100)#裁剪掉多余的部分```这将裁剪掉指定像素宽度的边缘。
您可以根据需要调整参数值。
4.调整图像大小:使用jimp调整图像大小,可以使用以下代码:```pythonimg.resize(width=200)#将图像宽度调整为200像素```这将调整图像的宽度为指定值。
用java处理图片大小
用java处理图片大小(转)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.FileFilter;import javax.imageio.ImageIO;import javax.swing.Icon;import javax.swing.ImageIcon;public class WriterImage implements FileFilter{public boolean accept(File pathname){boolean acc=false;String temp=pathname.getName();temp=temp.toLowerCase();if(temp.endsWith(".jpg")||temp.endsWith(".jpeg")){if(pathname.length()<(1024*1024))acc=true;}return acc;}public static Icon getFixedBoundIcon(String filePath, String toPath, int height, int width) throws Exception{double ratio = 0.0;// 缩放比例File F = new File(filePath);if (!F.isFile())throw new Exception(F+ " is not image file error in getFixedBoundIcon!"); Icon ret = new ImageIcon(filePath);BufferedImage Bi = ImageIO.read(F);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();System.out.println("ratio" + ratio);}} else{ratio = 1.0;System.out.println("ratio" + ratio);}File ThF = new File(toPath);Image Itemp = Bi.getScaledInstance(width, height,Bi.SCALE_SMOOTH);AffineTransformOp op = new AffineTransformOp(AffineTransform .getScaleInstance(ratio, ratio), null);Itemp = op.filter(Bi, null);try{ImageIO.write((BufferedImage) Itemp, "jpg", ThF);ret = new ImageIcon(ThF.getPath());} catch (Exception e){e.printStackTrace();}return ret;}}。
Java 图片处理 格式转换
Java 图片处理(包括 Jmagick 的应用) 图片处理( 的应用)作者: 佚名, 出处:IT 专家网,2010-10-29 08:30责任编辑: 谢妍妍,近期有使用到图片的压缩处理,由于在之前用 Java 处理时,在低像素的情况下, Java 处理的效果确实很差,然后尝试了用网上推荐的免费开源的第三方软件,利用 Java 的 jni 调用 dll 文件进行处理,效果还可以。
在此记录下,方便以后继续积累。
近期有使用到图片的压缩处理, 由于在之前用 Java 处理时, 在低像素的情况下, Java 处理的效果确实很差,然后尝试了用网上推荐的免费开源的第三方软件,利用 Java 的 jni 调用 dll 文件进行处理,效果还可以。
在此记录下,方便以后继续积累。
1、纯 Java 类处理图片代码Java 代码以下是代码片段: 以下是代码片段: /** * 转换图片大小,不变形 * * @param img * 图片文件 * @param width * 图片宽 * @param height * 图片高 */ public static void changeImge(File img, int width, int height) { try { Image image = ImageIO.read(img); //图片尺寸的大小处理, 如果长宽都小于规定大小, 则返回, 如果有一个大于规定大小, 则等比例缩放 int srcH = image.getHeight(null); int srcW = image.getWidth(null); if (srcH <= height && srcW <= width) { return;} int tmpH = width; int tmpW = height; //在长度和宽度都做了限制,不能超过设定值 while (srcH > height || srcW > width) { if(srcW > width) { tmpH = srcH * width / srcW; srcH = tmpH; srcW=width; } if(srcH > height) { tmpW = srcW * height / srcH; srcW = tmpW; srcH=height; } } BufferedImage bufferedImage = new BufferedImage(srcW, srcH, BufferedImage.TYPE_3BYTE_BGR); bufferedImage.getGraphics().drawImage( image.getScaledInstance(srcW, srcH, Image.SCALE_SMOOTH), 0, 0, srcW, srcH, null); FileOutputStream fos = new FileOutputStream(img); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos); encoder.encode(bufferedImage); fos.close(); // System.out.println("转换成功..."); } catch (IOException e) { e.printStackTrace(); throw new IllegalStateException("图片转换出错!", e); } }2、使用 Jmagick 辅助Html 代码(1)使用的 windows 下的 jmagick-win-6.3.9-q16.zip 地址是: /6.3.9/(2)doc 对应的 api 地址:/jmagick-doc/(3)安装 imagemagick,官方网站:/我使用的是:imagemagick-6.4.6-4-q16-windows-dll.exe :点击下载(4) 安装 imagemagick-6.4.6-4-q16-windows-dll.exe,将 安装目录下(按自己所 安装的目录找) 下的所有 dll 文件 copy 到系统盘下的 “c:\windows\system32\”文件 夹里(5) 配置环境变量再环境变量 path 里添加新的值 “c:\program files\imagemagick-6.4.6-4-q16“使 用 ide 可以不用配置(6)解压 jmagick-win-6.3.9-q16.zip将 jmagick.dll 复制到系统盘下的 “c:\windows\system32\”文件夹里 和 复制到 jdk 的 bin(例“d:\jdk6\bin”)文件里各一份将 jmagick.jar 复制到 tomcat 下的 lib 文件夹里 和 所使用项目的 web-inf 下 lib 文件里 各一份(7)web 应用如果部署到 tomcat 下,那么最好在 catalina.bat 文件中改变如下设置set java_opts=%java_opts% -xms256m -xmx768m -xx:maxpermsize=128m – djava.util.logging.manager=org.apache.juli.classloaderlogmanager – djava.util.logging.config.file=”${catalina.base}\conf\logging.properties”避免 heap 溢出的问题,参数看你自己的机器而定。
使用JMagick压缩图片大小尺寸
使用JMagick压缩图片大小尺寸使用JMagick压缩图片大小尺寸来源:作者:时间:2009-05-22 Tag:Jmagick压缩图片大小尺寸点击: 232我们经常需要实现图片上传的功能,但是光是上传图片可能还是远远不够的,我们必须对我们上传的图片进行处理,改变大小等等。
JMagick是ImageMagick提供的一套使用Java调用ImageMagick 的API接口,功能非常强大,下面介绍如果使用这个API处理图片的大小。
引入JMagick需要的类库:import magick.ImageInfo;import magick.MagickException;import magick.MagickImage;我们需要把图片保存为两个尺寸,这里要提前定义两种常量:public static String SIZENAME_LARGE = "large";public static String SIZENAME_SMALL = "small";下面介绍如何使用JMagick,里面用到的ImageUtil稍后会介绍,FileUtil是操作文件的工具类,这里就暂时不介绍了:MagickImage source = ImageUtil.getMagickImage("image file name");Map map = processHead(source);System.out.ptineln(map.get(SIZENAME_LARGE));System.out.ptineln(map.get(SIZENAME_SMALL));ImageUtil.getMagickImage(byte[] byte)processHead(MagickImage source)ImageUtil.regulate(MagickImage source)ImageUtil.resizePhoto(MagickImage source, String destPathName, int maxWidth, int maxHeight)。
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();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
double height = (double) src.getHeight(null); // 得到源图长
System.out.println("源图宽:"+wideth);
String temp = desc;
File _file = null;
if (desc == null || desc.trim().equals(""))
desc = source;
if (!desc.toLowerCase().trim().endsWith("jpg")) {
writer.setSource(image);
// 加入属性设置,非必要
// /*
writer.setOptions(options);
// */
writer.putImage(outfile);
} catch (JimiException je) {
* @param quality
* 图片格式转换
*/
public void toJPG(String source, String type, int quality) {
//0<quality<100
if (quality < 0 || quality > 100 || (quality + "") == null || (quality + "").equals("")) {
Java开源工具Jimi处理图片大小及格式转换
做图片转换,用了java的开源软件jimi图片处理工具,编写了一个图片转换工具类,包括了给图片打水印,给大家分享。
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
* @param ins
* 放大/缩小比率
* @throws JimiException
* @throws IOException
*/
public void changeDimension(String source, String desc, double ins) throws JimiException, IOException {
try {
JPGOptions options = new JPGOptions();
options.setQuality(quality);
ImageProducer image = Jimi.getImageProducer(source);
JimiWriter writer = Jimi.createJimiWriter(outfile);
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.JimiWriter;
import com.sun.jimi.core.options.JPGOptions;
public class TransferPicture {
/**
* @param source
* @param dest
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.start(desc);
e.addFrame(tag);
e.finish();
} else if (desc.toLowerCase().trim().endsWith("tif") || desc.toLowerCase().trim().endsWith("tiff")) {
System.out.println("源图长:"+height);
/*//缩放处理
int iWideth = (int) (wideth * ins);
int iHeight = (int) (height * ins);
*/
int iWideth = 300;
// do something with frame
}
//合成GIF:
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.start(outputFileName);
e.setDelay(1000); // 1 frame per sec
// jpg to gif
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.start(dest);
e.addFrame(file_in);
e.finish();
/*
//分解GIF:
GifDecoder d = new GifDecoder();
e.printStackTrace();
}
int end = stIndexOf(".");
file.deleteOnExit();
// output *.gif
file.renameTo(new File(dest.substring(0, end) + ".gif"));
toJPG(source, dest, 75);
BufferedImage file_in = null;
File file = new File(dest);
try {
file_in = javax.imageio.ImageIO.read(file);
} catch (Exception e) {
try{
System.out.println("toTIF encode");
JimiWriter writer = Jimi.createJimiWriter(dest);
writer.setSource(img);
dest = dest.substring(0, stIndexOf(".")) + ".tif";
if (!temp.trim().equals(desc))
_file.de).trim().endsWith("gif")) {
System.out.println("the type is gif!");
writer.putImage(dest);
}catch(Exception e){e.printStackTrace();}
}
/**
* 线性改变图片尺寸(可同时改变图片格式)
* @param source
* 源文件完整路径
* @param desc
* 目标文件完整路径
temp = desc.trim() + ".jpg";
}
this.toJPG(source, temp, 75);
_file = new File(temp); // 读入文件
Image src = javax.imageio.ImageIO.read(_file); // 构造Image对象
if (dest == null || dest.trim().equals(""))
dest = source;
// 1:转换为jpg
if (!dest.toLowerCase().trim().endsWith("jpg")) {
dest += ".jpg";
}
/*//打水印
File _filebiao = new File("test2.jpg");
Image src_biao = ImageIO.read(_filebiao);
int wideth_biao = 40;//src_biao.getWidth(null);
try{
tag = new BufferedImage(iWideth, iHeight,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, iWideth, iHeight, null); // 绘制缩小后的图
int iHeight = 200;
System.out.println("现图宽:"+iWideth);
System.out.println("现图长:"+iHeight);
System.out.println("缩放参数:"+ins);
BufferedImage tag = null;
System.out.println("quality must between ’0’ and ’100’");
System.out.println("set to DEFAULT value:’75’");