java 图片转换工具
package com.sicdt.sicsign.web.utils; import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import org.apache.commons.io.FileUtils;
import org.bouncycastle.util.encoders.Base64Encoder; import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter; public class MyImgUtils { /**
* <br>描 述: 将图片BASE64字符串转为二进制数组
* <br>作 者: 七脉
* @param base64 new Image();img.src或canvas.toDataURL("image/png")
* @return
* @throws IOException
*/
@SuppressWarnings("restriction")
public static byte[] imgBase64ToBytes(String base64) {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
//因为参数base64来源不一样,需要将附件数据替换清空掉。如果此入参来自canvas.toDataURL("image/png");
base64 = base64.replaceAll("data:image/png;base64,", "");
//base64解码并转为二进制数组
byte[] bytes = null;
try {
bytes = decoder.decodeBuffer(base64);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return bytes;
} /**
* <br>描 述: 图片字节数组转base64
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @return
*/
@SuppressWarnings("restriction")
public static String bytesToImgBase64(byte[] bytes){
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
return encoder.encode(bytes);
} /**
*
* <br>描 述: 图片/文件转二进制数组,这个方法有很多,只写一个
* <br>作 者: 七脉
* @param imgPath 图片路径
* @return
* @throws FileNotFoundException
*/
public static byte[] imgToBytes(String imgPath) {
File file = new File(imgPath);
BufferedImage bi = null;
ByteArrayOutputStream baos = null;
try {
//文件使用其他工具
bi = ImageIO.read(file);
baos = new ByteArrayOutputStream();
int index = imgPath.lastIndexOf(".");
String format = imgPath.substring(index+1);
ImageIO.write(bi, format, baos);
byte[] bytes = baos.toByteArray();
baos.close();
return bytes;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} /**
*
* <br>描 述: 将二进制转换为图片
* <br>作 者: 七脉
* @param outPath 将图片输出到哪里
* @param savePath 保存位置
*/
public static void bytesToImg(byte[] bytes,String savePath){
ByteArrayInputStream baos = new ByteArrayInputStream(bytes);
try {
BufferedImage bi = ImageIO.read(baos);
File file = new File(savePath);
ImageIO.write(bi, "png", file);
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* <br>描 述: 图片二进制数组转PDF二进制数组
* <br>作 者: 七脉
* @param imgBytes 图片二进制数组
* @return
*/
public static byte[] imgBytesToPdfBytes(byte[] imgBytes){
byte[] bytes = null;
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
PdfWriter.getInstance(document, baos);
// 设置文档的大小
document.setPageSize(PageSize.A4);
// 打开文档
document.open();
// 读取一个图片
Image image = Image.getInstance(imgBytes);
float imageWidth = image.getScaledWidth();
int i = 0;
while (imageWidth > 600) {
image.scalePercent(100 - i);
i++;
imageWidth = image.getScaledWidth();
}
image.setAlignment(Image.ALIGN_CENTER);
// 插入一个图片
document.add(image);
//转二进制数组
bytes = baos.toByteArray();
return bytes;
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null!=baos){
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null!=document){
document.close();
}
}
return bytes;
} /**
*
* <br>描 述: 二进制转文件,什么样的二进制转什么样的文件
* <br>作 者: 七脉
* @param bytes 二进制数组
* @param savePath 文件保存路径
*/
public static void byteArrayToFile(byte[] bytes,String savePath){
try {
FileUtils.writeByteArrayToFile(new File(savePath), bytes);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* <br>描 述: 去除图片背景,转透明图
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param is
* @return
*/
public static byte[] toTransparency(InputStream is) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
BufferedImage bi = ImageIO.read(is);
java.awt.Image image = (java.awt.Image) bi;
ImageIcon imageIcon = new ImageIcon(image);
BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(),
BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());
int alpha = 0;
for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
int rgb = bufferedImage.getRGB(j2, j1); int R = (rgb & 0xff0000) >> 16;
int G = (rgb & 0xff00) >> 8;
int B = (rgb & 0xff);
if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) {
rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff);
} bufferedImage.setRGB(j2, j1, rgb); }
} g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
ImageIO.write(bufferedImage, "png", byteArrayOutputStream);// 直接输出文件
} catch (Exception e) {
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
} }
java 图片转换工具的更多相关文章
- Base64 图片转换工具
以前在写asp的后台的时候,有一个上传功能是必须的,那时候进行的图片预览(未上传前)其实就是获取本地的图片路径来显示图片,但是随着HTML5的出现,可以把图片通过编码来实现预览. 在雅虎的36条速度优 ...
- xnconvert 图片转换工具
xnconvert是一款简单高效的图片转换工具.xnconvert能够批量地进行图片格式转换,并具有一定的图片处理功能,可以增加水印.特效,支持放大缩小.旋转等. xnconvert功能介绍: 你可以 ...
- 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)
Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- java 图片转换成base64字符串
import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...
- Java 图片验证码工具
package com.microwisdom.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics ...
- java json转换工具类
在java项目中,通常会用到json类型的转换,常常需要对 json字符串和对象进行相互转换. 在制作自定义的json转换类之前,先引入以下依赖 <!--json相关工具--><de ...
- java 图片处理工具类
import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import ja ...
- java bean 转换工具
考量要素: 1.简单的约定优于配置的同名属性copy 2.嵌套属性copy 3.flattern(扁平化)支持,要支持N层结构的copy到一层结构. 4.性能 如下这个网页,里面提到了好多工具. ht ...
随机推荐
- GCD XOR UVA 12716 找规律 给定一个n,找多少对(a,b)满足1<=b<=a<=n,gcd(a,b)=a^b;
/** 题目:GCD XOR UVA 12716 链接:https://vjudge.net/problem/UVA-12716 题意:给定一个n,找多少对(a,b)满足1<=b<=a&l ...
- 【藏】使用Entity Framework时要注意的一些性能问题
这篇文章写的很好: http://diaosbook.com/Post/2012/12/9/performance-issue-in-select-one-or-few-colums-via-enti ...
- CMake 简介与使用
cross platform make的缩写. 是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目文件.通过编写CMakeLists ...
- I.MX6 Ethernet MAC (ENET) MAC Address hacking
/********************************************************************* * I.MX6 Ethernet MAC (ENET) M ...
- Mary的加盟
Mary的加盟 1995年早些时候,我们招收了一个合同编制员——Mary Campione.她和我在后来的工作互助中相识.Mary的工作是帮助程序员使用平台特色如线程.我们很快意识到我们的工作如此相似 ...
- makefile编写---.a静态库的生成和调用
#.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs ...
- 004androidStudio ndk开发环境
004androidStudio ndk开发环境 android studio中编译C/C++源代码 1. 配置ndk.dir 在 local.properties 添加如下配置: sdk.dir=p ...
- hdu1829(A Bug's Life)
题目链接:传送门 题目大意:有n个昆虫,有m组关系,接下来m行表示两个昆虫性别不同,问是否有矛盾情况(同男同女) 题目思路:并查集的高级应用,开两倍数组大小,后n个数组表示和当前昆虫不同性别的集合 # ...
- Fennec VS. Snuke
Fennec VS. Snuke Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement Fenne ...
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)(转)
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种串行化的方式: ...