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 ...
随机推荐
- windows下mysql表名不自动转换小写配置
mysql5.6版本配置文件有两个 1.默认的配置在program files/MySQL/MySQL Server 5.6/my-default.ini 2.一个在programData/MySQL ...
- How tomcat works学习笔记
最近在看Tomcat的源码, 所以找了一本相关的书籍<How tomcat works>. 博客内容多为 学习该书时所记录的笔记.(如有侵权行为,请联系我:eviltomorrow@163 ...
- JNDI提供了一种统一的方式,可以用在网络上查找和访问服务
JNDI提供了一种统一的方式,可以用在网络上查找和访问服务.通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必须的信息. JNDI主要有两部分组成:应用程序编程 ...
- PC如何访问手机网址
http://blog.csdn.net/matthew_fan/article/details/7787504
- 001windows已遇到一个关键性问题 一分钟后自动重启
重装了系统Window7,出现了如题的提示"windows已遇到一个关键性问题 一分钟后自动重启" 查找原因: 通过事件管理器可以查看如上提示遇到的问题.一般是因为一些系统的服务没 ...
- matlab中双站异面直线法定位目标
calc.m %% 参数信息初始化 [x1,y1,z1]=deal(); [x2,y2,z2]=deal(,,); m1=/; n1=/; p1=^(/)/; m2=; n2=-^(/)/; p2=^ ...
- 宇视4G设备采用GB/T28181协议成功接入EasyGBS国标流媒体平台的设置流程
经过了多天的调试对接,终于将宇视的布控球顺利接入到了EasyGBS的国标平台,特地写一下对接过程中遇到的问题,希望能帮助大家避开一些麻烦: 第一步:电脑连接无线网络IPCWIFI,密码12345678 ...
- :eq()中的参数详解——需要注意
:eq()的括号中的参数如果是非负数则在DOM对象中按从上到下的顺序查找指定的元素,但是,如果是是负数,则在DOM中从下向上查找指定元素. 如下实例: 如果 $("#divTag div:e ...
- api xml database 设计一种数据库
w 问题 0-新增和读取,可以忽略更新和删除: 1-被请求方的xml dom结构多层且不定,且未来可能增删某些键(dom节点),且键值长度最值可能无法确定: 3-请求过程可能出现异常exception ...
- 阿里云RDS上的一些概念性记录
刚接触RDS,只能对RDS上的一些特性做一些笔记,方便记忆,以下为RDS上的内容摘录,取自官方文档 1 数据备份 可使用命令行或图形界面进行逻辑数据备份.仅限通过 RDS 管理控制台 或 OPEN A ...