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 ...
随机推荐
- Office Web Apps Server 2013与PDF(一)
好吧--这个消息有点旧,迟了将近4个月. Office Web Apps是微软各大服务产品系列中的一个基础服务,可以为SharePoint 2013.Exchange 2013.Lync 2013提供 ...
- bootstrap-table接合abp
将ui-grid 换成了bootstrap-table, 在abp中如此结合 function ajaxRequest(params) { console.log(params.data); role ...
- UVA 679 Dropping Balls 由小见大,分析思考 二叉树放小球,开关翻转,小球最终落下叶子编号。
A number of K balls are dropped one by one from the root of a fully binary tree structure FBT. Each ...
- HTML5学习笔记简明版(10):废弃的元素和属性
废弃的元素(Element) 这个小节里列出的元素在HTML5里将不再使用.现有文档升级到 HTML5的话能够使用一些替代方案. 比如parser section 能够处理isindex 元素的功能. ...
- 自定义实现wcf的用户名密码验证
目前wcf分为[传输层安全][消息层安全]两种,本身也自带的用户名密码验证的功能,但是ms为了防止用户名密码明文在网络上传输,所以,强制要求一旦使用[用户名密码]校验功能,则必须使用证书,按照常理讲, ...
- php文件加密
1.在线加密 网址:http://www.phpjm.net/encode.html 本人测试过还可以,就是纯加密,没有解密.
- asp.net网站底部的版权信息实现代码且可维护
网站底部的版权信息在特殊情况还是比较重要的所以在实现的时候一定要尽可能的做到可维护性,接下来将介绍一些技巧可达到可维护效果,感兴趣的你可不要错过了哈 一个大网站页面很多,如果每个版权信息直接写在下面, ...
- 笔记-Android学习历程
1. Junit 配置:在manifest节点下 写入instrumentation,在其兄弟节点下配置application <instrumentation android:name=&qu ...
- NoSQL-MongoDB with python
前言: MongoDB,文档存储型数据库(document store).NoSQL数据库中,它独占鳌头,碾压其他的NoSQL数据库. 使用C++开发的,性能仅次C.与redis一样,开源.高扩展.高 ...
- Restoring Road Network
D - Restoring Road Network Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem State ...