电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java 壓縮圖片并打包成ZIP文件的示例

瀏覽:2日期:2022-08-20 09:42:57

JAVA 獲取網(wǎng)絡(luò)圖片或本地圖片壓縮后打成ZIP,但是獲取網(wǎng)絡(luò)流存在問題:每次獲取圖片流的大小不一樣(圖片不完整),以致無法構(gòu)建圖片進(jìn)行壓縮?

/* 釋以下代碼:即可獲取完整圖片流網(wǎng)絡(luò)不穩(wěn)定情況且網(wǎng)絡(luò)流是順序讀取,所以獲得前部份流,不需要關(guān)閉連接,只需要將用完的流關(guān)閉即可 */ finally{ if(httpCon != null) httpCon.disconnect(); }

package com.sunshine.monitor.comm.util.http; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import sun.net.www.protocol.ftp.FtpURLConnection; /** * 獲取網(wǎng)絡(luò)圖片 * * @author OY */ public abstract class HttpHelpers {private static final String KEY = 'file.encoding';private static final String ENCODING = 'GBK';public static InputStream getInputStream(String url) throws Exception{ URLConnection con = null; HttpURLConnection httpCon = null; FtpURLConnection ftpCon= null; try { System.setProperty(KEY, ENCODING); URL _url = new URL(url); con = _url.openConnection(); con.setConnectTimeout(3000); con.setUseCaches(false);// 不緩存 con.setDefaultUseCaches(false); if (con instanceof HttpURLConnection) { httpCon = (HttpURLConnection) con; httpCon.setInstanceFollowRedirects(true); //httpCon.setRequestProperty('Accept-Charset', 'utf-8'); if (httpCon.getResponseCode() >= 300) { System.out.println('URL:' + url + ',HTTP Request is not success, Response code is ' + httpCon.getResponseCode()); } else { return httpCon.getInputStream(); } } else if(con instanceof FtpURLConnection){ ftpCon = (FtpURLConnection)con; return ftpCon.getInputStream(); } } catch (Exception e) { e.printStackTrace(); }finally{ if(httpCon != null) httpCon.disconnect(); } return null; } public static void main(String[] args) { // 1圖片本地存儲(chǔ)大小 OutputStream fout = null; InputStream input = null; try { fout = new FileOutputStream('F:' + File.separator + '1.jpg'); input = getInputStream('http://192.168.1.200/t.jpg'); byte[] buffer = new byte[1024]; int count = 0 ; while((count=input.read(buffer)) != -1){ fout.write(buffer, 0, count); } fout.flush(); } catch (Exception e) { e.printStackTrace(); } finally{ try { if(input != null) input.close(); if(fout != null) fout.close(); } catch (IOException e) { e.printStackTrace(); } } // 2是否可以構(gòu)建圖片 try { input = getInputStream('http://192.168.1.200/t.jpg'); ImageInputStream iis = ImageIO.createImageInputStream(input); if(iis != null) { Iterator<ImageReader> it = ImageIO.getImageReaders(iis); if(!it.hasNext()){ System.out.println('流不完整或不是圖片!'); } else { System.out.println(it.next().getFormatName()); } } } catch (Exception e) { e.printStackTrace(); } } }

圖片壓縮采用thumbnailator,可以按大小、按比例、按質(zhì)量壓縮并增加水印,API簡單

package com.sunshine.monitor.comm.util.compress; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Positions; /** * 圖片壓縮:按大小、按比例壓縮、按質(zhì)量 * 增加水印 * @author OY * */ public abstract class CompressPictureTools {private static float QUALITY = 0.6f; /** * 按大小縮小 * * @param file * @param width * @param height * @return * @throws Exception */ public static byte[] compressOfSize(File file, int width, int height) throws Exception { byte[] bs = null; InputStream input = null; try { input = new FileInputStream(file); bs = compressOfSize(input, width, height); } catch (Exception e) { e.printStackTrace(); } finally { try { if (input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } } return bs; }/** * 按大小縮小 * * @param input 原圖 * @param width 目標(biāo)寬席 * @param height 目標(biāo)高度 * @return * @throws Exception */ public static byte[] compressOfSize(InputStream input, int width, int height) throws Exception { ByteArrayOutputStream output = null; try { output = new ByteArrayOutputStream(); Thumbnails.of(input).size(width, height).toOutputStream(output); return output.toByteArray(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (output != null) output.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }/** * 按指定比例進(jìn)行縮小和放大: percent=1不變 percent>1放大 percent<1縮小 * * @param input 原圖 * @param percent 壓縮比例 * @return * @throws Exception */ public static byte[] compressOfPercent(InputStream input, float percent) throws Exception { ByteArrayOutputStream output = null; try { output = new ByteArrayOutputStream(); Thumbnails.of(input).scale(percent).toOutputStream(output); return output.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (output != null) output.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }/** * 按指定比例進(jìn)行縮小和放大: percent=1不變 percent>1放大 percent<1縮小 * * @param file 原圖 * @param percent 壓縮比例 */ public static byte[] compressOfPercent(File file, float percent) throws Exception { byte[] bs = null; InputStream input = null; try { input = new FileInputStream(file); bs = compressOfPercent(input, percent); } catch (Exception e) { e.printStackTrace(); } finally { try { if (input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } } return bs; }/** * 按質(zhì)量壓縮:圖片尺寸不變,壓縮圖片文件大小 * * @param file 原圖 * @param quality * =1為最高質(zhì)量 * @return * @throws Exception */ public static byte[] compressOfQuality(File file, float quality) throws Exception { byte[] bs = null; InputStream input = null; try { input = new FileInputStream(file); bs = compressOfQuality(input, quality); } catch (Exception e) { e.printStackTrace(); } finally { try { if (input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } } return bs; }/** * 按質(zhì)量壓縮:圖片尺寸不變,壓縮圖片文件大小 * * @param input 原圖 * @param quality * =1為最高質(zhì)量 * @return * @throws Exception */ public static byte[] compressOfQuality(InputStream input, float quality) throws Exception { ByteArrayOutputStream output = null; try { output = new ByteArrayOutputStream(); if(quality == 0){ Thumbnails.of(input).scale(1f).outputQuality(QUALITY) .toOutputStream(output); } else { Thumbnails.of(input).scale(1f).outputQuality(quality) .toOutputStream(output); } return output.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (output != null) output.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }/** * 圖片右下角添加水印 * * @param fromPic * 原圖 * @param markPic * 水印圖 * @param transparent * 透明度 * @return * @throws Exception */ public static byte[] waterMark(byte[] fromPic, InputStream markPic, float transparent) throws Exception { InputStream finput = null; ByteArrayOutputStream output = null; try { finput = new ByteArrayInputStream(fromPic); output = new ByteArrayOutputStream(); Thumbnails .of(finput) .scale(1f) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(markPic), transparent).toOutputStream(output); return output.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (output != null) output.close(); if (finput != null) finput.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }/** * 圖片格式轉(zhuǎn)換 * * @param fromPic * 原圖 * @param picFormat * 格式 png,jpg... * @return * @throws Exception */ public static byte[] transferPicFormat(byte[] fromPic, String picFormat) throws Exception { ByteArrayInputStream finput = null; ByteArrayOutputStream output = null; try { finput = new ByteArrayInputStream(fromPic); output = new ByteArrayOutputStream(); Thumbnails.of(finput).outputFormat(picFormat) .toOutputStream(output); return output.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (output != null) output.close(); if (finput != null) finput.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }

因JDK1.7以下,不可以設(shè)置編碼,以致中文亂碼問題,未采用java.util.ZipOutputStream,而是Apache ant下的ZipOutputStream

package com.sunshine.monitor.comm.util.compress; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import com.sunshine.monitor.comm.util.http.HttpHelpers; /** * 圖片壓縮成ZIP,支持并發(fā)多線程; * java.util.ZipOutputStream中文亂碼 * 方法一、JDK1.7可以設(shè)置編碼 * 方法二、換成Apache ant * @author OY * */ public class PicturePackZipTools { private static String DEFAULT_COMPRESS_ENCODE = 'GBK'; private static ZipOutputStream getZipStreamEncode(OutputStream output, String encode) { ZipOutputStream zipStream = new ZipOutputStream(output); if (encode == null || ''.equals(encode)) { zipStream.setEncoding(DEFAULT_COMPRESS_ENCODE); } else { zipStream.setEncoding(encode); } return zipStream; }/** * 訪問本地路徑下的所有文件 * * @param path * @return */ public static List<File> loadFiles(String path) { List<File> list = null; try { File fold = new File(path); if (fold.isDirectory()) { File[] files = fold.listFiles(); list = Arrays.asList(files); } } catch (Exception e) { e.printStackTrace(); } return list; }/** * 讀取本地系統(tǒng)路徑下的所有圖片打成ZIP * * @param path * @param output * @param compress */ public static void compressZip(String path, OutputStream output, String encode, boolean compress) { List<File> listfiles = null; ZipOutputStream zipStream = null; try { zipStream = getZipStreamEncode(output, encode); listfiles = loadFiles(path); for (File file : listfiles) { compressZip(file, zipStream, compress); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (zipStream != null) { zipStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }/** * 讀取網(wǎng)絡(luò)圖片打成打成ZIP * @param urls * key = 圖片名, value = 圖片URL * @param output * @param encode 編碼 * @param compress 是否壓縮 */ public static void compressZip(Map<String, String> urls, OutputStream output, String encode, boolean compress) { ZipOutputStream zipStream = null; try { zipStream = getZipStreamEncode(output, encode); Map<String, String> synUrls = Collections.synchronizedMap(urls); Set<Entry<String, String>> set = synUrls.entrySet(); Iterator<Entry<String, String>> it = set.iterator(); while (it.hasNext()) { Entry<String, String> entry = it.next(); compressZip(entry.getValue(), zipStream, entry.getKey(), compress); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (zipStream != null) { zipStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }/** * 壓縮單個(gè)文件為ZIP * @param file * @param output * @param encode * @param compress */ public static void compressZip(File file, OutputStream output, String encode, boolean compress) throws Exception{ FileInputStream input = null; try { input = new FileInputStream(file); compressZip(input,file.getName(),output,encode,compress); } catch (Exception e) { e.printStackTrace(); } finally { try { if (input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } }}/** * 壓縮單個(gè)文件為ZIP * @param input * @param fileName * @param output * @param encode * @param compress */ public static void compressZip(InputStream input, String fileName, OutputStream output, String encode, boolean compress) throws Exception { ZipOutputStream zipStream = null; try { zipStream = getZipStreamEncode(output, encode); zip(input, zipStream, fileName, compress); } catch (Exception e) { e.printStackTrace(); } finally { try { if (zipStream != null) zipStream.close(); } catch (IOException e) { e.printStackTrace(); } } }/** * 本地圖片 */ private static void compressZip(File file, ZipOutputStream zipStream, boolean compress) throws Exception{ FileInputStream input = null; try { input = new FileInputStream(file); zip(input, zipStream, file.getName(), compress); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } } }/** * 網(wǎng)絡(luò)圖片 * * @param url * @param zipStream * @param compress */ private static void compressZip(String url, ZipOutputStream zipStream, String fileName, boolean compress) throws Exception{ InputStream input = null; try { input = HttpHelpers.getInputStream(url); zip(input, zipStream, fileName, compress); } catch (Exception e) { e.printStackTrace(); } finally{ try { if(input != null) input.close(); } catch (IOException e) { e.printStackTrace(); } } }/** * @param input * @param zipStream * @param zipEntryName * @param compress */ private static void zip(InputStream input, ZipOutputStream zipStream, String zipEntryName, boolean compress) throws Exception{ byte[] bytes = null; BufferedInputStream bufferStream = null; try { if(input == null) throw new Exception('獲取壓縮的數(shù)據(jù)項(xiàng)失敗! 數(shù)據(jù)項(xiàng)名為:' + zipEntryName); // 壓縮條目不是具體獨(dú)立的文件,而是壓縮包文件列表中的列表項(xiàng),稱為條目,就像索引一樣 ZipEntry zipEntry = new ZipEntry(zipEntryName); // 定位到該壓縮條目位置,開始寫入文件到壓縮包中 zipStream.putNextEntry(zipEntry); if (compress) { bytes = CompressPictureTools.compressOfQuality(input, 0); zipStream.write(bytes, 0, bytes.length); } else { bytes = new byte[1024 * 5];// 讀寫緩沖區(qū) bufferStream = new BufferedInputStream(input);// 輸入緩沖流 int read = 0; while ((read = bufferStream.read(bytes)) != -1) { zipStream.write(bytes, 0, read); } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != bufferStream) bufferStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }

以上就是Java 壓縮圖片并打成ZIP文件的示例的詳細(xì)內(nèi)容,更多關(guān)于Java 壓縮圖片打包成zip的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 1000帧高速摄像机|工业高速相机厂家|科天健光电技术 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 宿舍管理系统_智慧园区系统_房屋/房产管理系统_公寓管理系统 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 科普仪器菏泽市教育教学仪器总厂 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 数字展示在线_数字展示行业门户网站| 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 运动木地板_体育木地板_篮球馆木地板_舞台木地板-实木运动地板厂家 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 |