package com.utils.file; import java.awt.Container; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.Timestamp; import java.util.Date; import java.util.UUID; import javax.imageio.ImageIO;import wfc.service.database.BlobHelper; import...Condition; import...Conditions; import...SQL; public class imageThumbnail { private static void createThumbnail(String filename, int thumbWidth, int thumbHeight, String outFilename)throws Exception{ //根据地址载入图片 Image image = Toolkit.getDefaultToolkit().getImage(filename); MediaTracker mediaTracker = new MediaTracker(new Container()); mediaTracker.addImage(image, 0); mediaTracker.waitForID(0); double thumbRatio = (double)thumbWidth / (double)thumbHeight; int imageWidth = image.getWidth(null); int imageHeight = image.getHeight(null); double imageRatio = (double)imageWidth / (double)imageHeight; if (thumbRatio < imageRatio) { thumbHeight = (int)(thumbWidth / imageRatio); } else { thumbWidth = (int)(thumbHeight * imageRatio); } BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = thumbImage.createGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); File fileThumbnail = new File(outFilename); ImageIO.write(thumbImage, "jpg", fileThumbnail); //获取缩略图做其他业务用--放在别处 BufferedInputStream in = new BufferedInputStream(new FileInputStream(outFilename)); File file = new File("C:\Users\Desktop\jjjj.jpg"); if (file != null) { file.createNewFile(); } // 指定要写入文件的缓冲输出字节流 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); byte[] bb = new byte[1024];// 用来存储每次读取到的字节数组 int n;// 每次读取到的字节数组的长度 while ((n = in.read(bb)) != -1) { out.write(bb, 0, n);// 写入到输出流 } out.close();// 关闭流 in.close(); fileThumbnail.delete();//删除缩略图 //或把缩略图入库 byte [] filebyte = FileLoadUtil.File2byte(fileThumbnail); Timestamp saveTime=new Timestamp(new Date().getTime()); String uuid = UUID.randomUUID().toString(); String fjId = "202004"+UUID.randomUUID().toString(); String sql = "insert into DAN_FJ(FJ_ID,ST_APP_ID,TIME) values (?,?,?)"; Object[] objects = new Object[] {uuid,fjId,saveTime}; SQL.execute(sql,objects); Conditions conds = Conditions.newOrConditions(); conds.add(new Condition("FJ_ID", Condition.OT_EQUAL, uuid)); BlobHelper.setBlob("DAN_FJ", "APPLY_FJ", conds.toString(),filebyte, conds.getObjectArray()); fileThumbnail.delete();//删除缩略图 } public static void main(String[] args) throws Exception { //原地址,缩略图高,宽,输出地址和缩略图名 createThumbnail("C:\Users\Desktop\jj.jpg",100,75,"C:\Users\Desktop\jjj.jpg"); } }
/** * 将文件转换成byte数组 * @param filePath * @return */ public static byte[] File2byte(File tradeFile){ byte[] buffer = null; try { FileInputStream fis = new FileInputStream(tradeFile); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] b = new byte[10240]; int n; while ((n = fis.read(b)) != -1) { bos.write(b, 0, n); } fis.close(); bos.close(); buffer = bos.toByteArray(); }catch (FileNotFoundException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } return buffer; }