package com.mofang.util;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
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.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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.exif.ExifIFD0Directory;
import com.drew.metadata.exif.ExifSubIFDDirectory;
/**
* 图片处理工具类:<br>
* 功能:缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
*
* @author Administrator
*/
public class ImagesUtils {
/**
* 几种常见的图片格式
*/
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 srcImageFile
* 源图像文件地址
* @param result
* 缩放后的图像地址
* @param scale
* 缩放比例
* @param flag
* 缩放选择:true 放大; false 缩小;
*/
public final static void scale(String srcImageFile, String result, int scale, boolean flag,String hzm) {
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;
}
String filemk=result.substring(0, result.lastIndexOf("/"));
File f1=new File(filemk);
if (!f1.exists()) {
f1.mkdirs();
}
Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
if(src.getAlphaRaster()!=null){
tag = new BufferedImage(width, height, BufferedImage. TYPE_4BYTE_ABGR);
}
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
ImageIO.write(tag, hzm, 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 pressImg, String result, int height, int width, boolean bb) {
try {
double ratio = 0.0; // 缩放比例
System.out.println(srcImageFile);
File f = new File(srcImageFile);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
if(bi.getHeight() > bi.getWidth()){
int ldata = 0;
ldata = height;
height = width;
width = ldata;
}
double fwidth = width;
double fheight = height;
BufferedImage tag = null;
System.out.println("(bi.getHeight():" + bi.getHeight());
System.out.println("(bi.getHeight():" + bi.getWidth());
// 计算比例
if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
if (bi.getHeight() > bi.getWidth()) {
ratio = (new Integer(height)).doubleValue() / bi.getHeight();
fwidth = bi.getWidth() * ratio;
} else {
ratio = (new Integer(width)).doubleValue() / bi.getWidth();
fheight = bi.getHeight() * ratio;
}
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
CropImageFilter cropFilter = new CropImageFilter(0, 0, (int) fwidth, (int) fheight);
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(itemp.getSource(), cropFilter));
tag = new BufferedImage((int) fwidth, (int) fheight, BufferedImage.TYPE_INT_RGB);
Graphics2D g1 = tag.createGraphics();
g1.drawImage(img, 0, 0, null);
// 水印文件
Image src_biao = ImageIO.read(new File(pressImg));
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
float apla = (float) 0.4;
g1.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,apla));
g1.drawImage(src_biao, (int)(fwidth-wideth_biao-5), (int)(fheight - height_biao-5), wideth_biao, height_biao, null);
// 水印文件结束
g1.dispose();
}
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);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
g.dispose();
itemp = image;
}
ImageIO.write(tag, "JPEG", new File(result));
} else {
fwidth = bi.getWidth();
fheight = bi.getHeight();
BufferedImage image = new BufferedImage((int)fwidth, (int)fheight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(itemp, 0, 0, (int)fwidth, (int)fheight, null);
// 水印文件
Image src_biao = ImageIO.read(new File(pressImg));
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
float alpha = (float) 0.3;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawImage(src_biao, (int)(fwidth - wideth_biao - 5), (int)(fheight - height_biao - 5), wideth_biao, height_biao, null);
// 水印文件结束
g.dispose();
ImageIO.write((BufferedImage) image, "JPEG", new File(result));
//Copy(srcImageFile, result);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 缩放并切割图像(按高度和宽度缩放)
*
* @param srcImageFile
* 源图像文件地址
* @param result
* 缩放后的图像地址
* @param height
* 缩放后的高度
* @param width
* 缩放后的宽度
* @param bb
* 比例不对时是否需要补白:true为补白; false为不补白;
*/
public final static void scale3(String srcImageFile, S
java 图片压缩 iphone拍照上传旋转问题处理压缩工具类
3星 · 超过75%的资源 需积分: 50 3 浏览量
2016-09-30
14:03:29
上传
评论
收藏 290KB ZIP 举报
qq_28001615
- 粉丝: 0
- 资源: 2
最新资源
- 编译原理深⼊词法分析实践-实验报告
- Disk-Drill数据恢复软件MAC版,支持最新arm架构
- 上班摸鱼神器-纯透明小说阅读工具
- 音频视频转文字3.7.7每天都可以转3小时.apk
- rain-ripples.PNG
- Gitlab: Python项目CI/CD实践 > fastapi-t1 > Dockerfile
- Epic Toon FX 史诗卡通特效 Unity像素游戏素材特效美术资源unitypackage
- 概率论与潮流统计学在时尚产业的应用(文档加Matlab源码)
- springboot的校园失物招领系统源码.zip
- Skeleton-Low Poly 低多边形骨架模型Unity插件美术资源包unitypackage
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈