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 ...
随机推荐
- FreeBSD安装MySQL5.7.17
[root@tuhooo /usr/ports/databases/mysql57-server]# make install===> Installing for mysql57-serve ...
- XCode 4.6下XIB文件提示“...could not be opened..."的问题
最近更新了Mac系统和XCode,当我把一个以前的项目用Xcode5打开以后,再用Xcode4.6打开时,选中XXXX.xib/storyboard文件,有的文件会弹出 "The docum ...
- Ocelot + IdentityServer4 坑自己
现像是 connect/userinfo 可以访问 但是api都提示401 后面发现是在appsettings.json "Options": {"Authority&q ...
- text-encoding正确使用姿势
蓝牙打印,需要转字符串为gb2312到uint8array.果断使用了一把text-encoding,始终不对. https://github.com/inexorabletash/text-enco ...
- jdbc 中 excute executeUpdate的用法作用
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...
- web开发之php--- mvc 模式
http://www.cnblogs.com/archy_yu/p/4229929.html
- boot2docker里报"no space left on device" error的解决方法
docker中pull远程image时:报 no space left on device virtualbox中调大虚拟内存即可.. 之前调的硬盘大小...
- X明X源面试题《三》
本文转自自zhangxh_Doris 昨天(05.23)下午去参加了明源软件的暑期实习宣讲+笔试,第一次听说这个行业,行业和笔试风格完全不一样啊,5道行测智力题+1个问答+ 斐波那契数列 + 洗牌算法 ...
- FlaskWeb开发
Flask基本使用 上下文 程序上下文 current_app g 请求上下文 request session https://blog.csdn.net/wsxqaz/article/details ...
- Python中MRO
MRO(方法解析顺序) 当有多重继承时,基于“从左到右,深度优先原则”: class CommonBase(): def Method(self): print('CommonBase') class ...