700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java实现tiff图片转化为jpg格式

Java实现tiff图片转化为jpg格式

时间:2018-09-04 00:20:20

相关推荐

Java实现tiff图片转化为jpg格式

最近遇到的问题:把存储在数据库的base64以图片格式批量展示到前端,正常情况下在字符串前面加上“data:image/jpg;base64,”就行了,但是如果图片本身是tiff格式(浏览器无法预览),就无法完成预览。

问题:如何将一个tiff文件的base64转化为一个jpg图片的base64?

为什么不在前端做?因为后端狗一只

正题:简单理解为3步:

1、根据已获得tiff的base64生成tiff文件

2、将tiff文件转为jpg文件

3、获取jpg文件的base64

第2步比较麻烦,查了很多资料,比如ImageMagick工具,但是需要下工具,拒绝。也有用jai_codec-1.1.3.jar 和 jai_core.jar包的,这俩不是免费包,拒绝;总之我需要一个不下载工具,只使用开源jar包的方法。

附上解决的源码,都写在一个文件中(方法按照顺序排列,加了一个tiff格式判断的方法):

import java.awt.image.BufferedImage;import java.io.*;import javax.imageio.ImageIO;import mons.codec.binary.Base64;public class FileUtil {/*** 根据base64判断图片是否为tiff* @param base64* @return*/public boolean checkImageBase64Format(String base64) {byte[] b=java.util.Base64.getDecoder().decode(base64);try {// 判断是否为tiff格式if((b[0] & 0xFF) == 0x49 && (b[1] & 0xFF)==0x49 && (b[2] & 0xFF)==0x2A){return true;}else {return false;}}catch(Exception e) {e.printStackTrace();return false;}}/*** 根据BASE64字符串生成图片文件,此方法生成tiff格式* @param base64* @param fileName* @param dictionary */public void base64ToFile(String base64,String fileName,String dictionary) {File file =null;File dir=new File(dictionary);//无目录的情况下创建一个目录,会受权限影响,最好是已存在的目录if(!dir.exists() && dir.isDirectory()) {dir.mkdirs();}java.io.FileOutputStream fos=null;BufferedOutputStream bos=null;try {byte [] bytes=java.util.Base64.getDecoder().decode(base64);file=new File(dictionary+fileName);//目录+文件名作为输出文件的全路径fos= new java.io.FileOutputStream(file);bos=new BufferedOutputStream(fos);bos.write(bytes);}catch(Exception e) {e.printStackTrace();}finally {if(bos!=null) {try {bos.close();}catch(IOException e) {e.printStackTrace();}}if(fos!=null) {try {fos.close();}catch(IOException e) {e.printStackTrace();}}}}/*** 将tiff图片转化为jpg,生成新的文件* @param oldPath原图片的全路径* @param newPath生成新的图片的全路径*/public void tiffToJpg(String oldPath,String newPath) {try {BufferedImage bufferegImage=ImageIO.read(new File(oldPath));ImageIO.write(bufferegImage,"jpg",new File(newPath));//可以是png等其它图片格式}catch(IOException e) {e.printStackTrace();}}/*** 将任意图片文件转为base64,读字节是最快的方式* @param filePath图片文件的全路径* @return*/public String imageToBase64(String filePath) {byte [] data =null;try {InputStream in =new FileInputStream(filePath);data=new byte[in.available()];in.read(data);in.close();}catch(Exception e) {e.printStackTrace();return null;}return new String(Base64.encodeBase64(data));}}

核心代码:

/*** 将tiff图片转化为jpg,生成新的文件* @param oldPath原图片的全路径* @param newPath生成新的图片的全路径*/public void tiffToJpg(String oldPath,String newPath) {try {BufferedImage bufferegImage=ImageIO.read(new File(oldPath));ImageIO.write(bufferegImage,"jpg",new File(newPath));//可以是png等其它图片格式}catch(IOException e) {e.printStackTrace();}}

是的,转化就是这么简单,需要用到的依赖

<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.3</version></dependency><dependency><groupId>com.github.jai-imageio</groupId><artifactId>jai-imageio-core</artifactId><version>1.4.0</version></dependency>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。