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

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

Java 讀取網(wǎng)絡(luò)圖片存儲到本地并生成縮略圖

瀏覽:3日期:2022-08-11 16:21:20
目錄1.創(chuàng)建用于保存圖片的文件夾2.新建 createLocalImage 類用于圖片轉(zhuǎn)換3.生成縮略圖使用工具類Thumbnails另一種方法

之前使用 Python 爬蟲抓取電影網(wǎng)站信息作為自己網(wǎng)站的數(shù)據(jù)來源,其中包含的圖片都是網(wǎng)絡(luò)圖片,會存在這樣一個問題:

當(dāng)原始網(wǎng)站訪問速度比較慢時,網(wǎng)站圖片加載時間也會變得很慢,而且如果原始網(wǎng)站掛了,圖片就直接訪問不到了。

此時的用戶體驗就很不好,所以對此進行了優(yōu)化:

每次后端啟動時會默認開啟任務(wù)先將未轉(zhuǎn)換的網(wǎng)絡(luò)圖片存儲到本地,再把網(wǎng)頁中圖片列表改為訪問本地圖片,這樣就解決了加載慢的問題,也降低了和原始網(wǎng)站的耦合性,具體步驟如下:

1.創(chuàng)建用于保存圖片的文件夾

我的保存路徑:F:images

2.新建 createLocalImage 類用于圖片轉(zhuǎn)換

package com.cn.beauty.task;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.net.HttpURLConnection;import java.net.URL;public class createLocalImage {// 需要保存到本地的根路徑 private static String basePath = 'F:/'; public static void main(String[] args) { // 網(wǎng)頁圖片路徑String destUrl = 'http://5b0988e595225.cdn.sohucs.com/images/20200215/349bb3cb88b744dcb67f37dba2f71abf.jpeg';String filePath = createLocalImageMethod(destUrl);System.out.println('生成的相對文件路徑為' + filePath); } private static String createLocalImageMethod(String destUrl) {FileOutputStream fos = null;BufferedInputStream bis = null;HttpURLConnection httpUrl = null;URL url = null;int BUFFER_SIZE = 1024;byte[] buf = new byte[BUFFER_SIZE];int size = 0;String filePath = '';try { System.out.println('原始圖片URL為:' + destUrl); String[] fileNameArray = destUrl.split('/'); if (fileNameArray.length > 1) {String fileName = fileNameArray[fileNameArray.length - 1];filePath = 'images/' + fileName;File file = new File(basePath + filePath);if (!file.exists()) { url = new URL(destUrl); httpUrl = (HttpURLConnection) url.openConnection(); httpUrl.connect(); bis = new BufferedInputStream(httpUrl.getInputStream()); fos = new FileOutputStream(basePath + filePath); while ((size = bis.read(buf)) != -1) {fos.write(buf, 0, size); } fos.flush();}// 后續(xù)對圖片進行縮略圖處理,見后面代碼 }} catch (IOException e) { e.printStackTrace();} catch (ClassCastException e) { e.printStackTrace();} finally { try {fos.close();bis.close();httpUrl.disconnect(); } catch (IOException e) { } catch (NullPointerException e) { }}return filePath; }}

運行后發(fā)現(xiàn)圖片已經(jīng)成功生成:

Java 讀取網(wǎng)絡(luò)圖片存儲到本地并生成縮略圖

3.生成縮略圖使用工具類Thumbnails

如果是圖片列表的展示,原始圖片過大還是會影響加載速度,此時我們可以將圖片處理為縮略圖進行顯示。

我們使用了一個很強大的圖片處理工具類:Thumbnails,它支持的功能包括:

按指定大小進行縮放; 按照比例進行縮放; 不按照比例,指定大小進行縮放; 旋轉(zhuǎn),水印,裁剪; 轉(zhuǎn)化圖像格式; 輸出到 OutputStream; 輸出到 BufferedImage;

這里的需求比較簡單,只用到了按指定大小進行縮放的功能。

引入對應(yīng) jar 包:

<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version></dependency>

在 createLocalImage 方法中添加縮略圖生成的代碼實現(xiàn):

String thumbName = fileName.split('.')[0] + '_thumb.' + fileName.split('.')[1]; String thumbPath = basePath + filePath.replace(fileName, thumbName); //將要轉(zhuǎn)換出的小圖文件 File fo = new File(thumbPath); if (fo.exists()) { return thumbPath; } // 第一個參數(shù)是原始圖片的路徑,第二個是縮略圖的路徑 Thumbnails.of(basePath + filePath).size(120, 120).toFile(thumbPath); System.out.println('生成的縮略圖路徑為:' + thumbPath);

再次運行,發(fā)現(xiàn)縮略圖已經(jīng)成功生成:

Java 讀取網(wǎng)絡(luò)圖片存儲到本地并生成縮略圖

另一種方法

直接將下面的代碼封裝成一個util即可,調(diào)用示例在main方法中,調(diào)用的地方需要引入import java.awt.image.BufferedImage;,還要確保舊文件是存在的

import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ResizeImage { public static void main(String[] args) throws IOException {//windows路徑,linux環(huán)境下相應(yīng)修改String outputFolder = 'D:test';String fileName = 'D:testtest.jpg';ResizeImage r = new ResizeImage();int toWidth=220,toHeight=220;BufferedImage imageList = r.getImageList(fileName,new String[] {'jpg','png','gif'});r.writeHighQuality('newFile.jpg',r.zoomImage(imageList,toWidth,toHeight),outputFolder); } /** * @Description: 取得圖片對象 * @param 要轉(zhuǎn)化的圖像的文件夾,就是存放圖像的文件夾路徑 * @date 2017年5月7日10:48:27 */ public BufferedImage zoomImage(BufferedImage im, int toWidth , int toHeight) {BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);return result; } /** * @Description: 取得圖片對象 * @param 要轉(zhuǎn)化的圖像的文件夾,就是存放圖像的文件夾路徑 * @date 2017年5月7日10:48:27 */ public BufferedImage getImageList(String ImgList, String[] type) throws IOException{Map<String,Boolean> map = new HashMap<String, Boolean>();for(String s : type) { map.put(s,true);}BufferedImage imageList = null;File file = null;file = new File(ImgList);try{ if(file.length() != 0 && map.get(getExtension(file.getName())) != null ){imageList = javax.imageio.ImageIO.read(file); }}catch(Exception e){ imageList = null;}return imageList; } /** * 把圖片寫到磁盤上 * @param im * @param path 圖片寫入的文件夾地址 * @param fileName 寫入圖片的名字 * @date 2017年5月7日10:48:27 */ public boolean writeToDisk(BufferedImage im, String path, String fileName) {File f = new File(path + fileName);String fileType = getExtension(fileName);if (fileType == null) return false;try { ImageIO.write(im, fileType, f); im.flush(); return true;} catch (IOException e) { return false;} } /** * @Description: 生成圖片 * @param String path , BufferedImage im, String fileFullPath * @date 2017年5月7日10:48:27 */ public boolean writeHighQuality(String path , BufferedImage im, String fileFullPath) throws IOException {FileOutputStream newimage = null;try { // 輸出到文件流 newimage = new FileOutputStream(fileFullPath+path); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage); JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im); // 壓縮質(zhì)量 jep.setQuality(1f, true); encoder.encode(im, jep); //近JPEG編碼 newimage.close(); return true;} catch (Exception e) { return false;} } /** * @Description: 取文件名的后綴 * @param String fileName 格式如:cn1100000213EA_1_xnl.jpg * @date 2017年5月7日10:48:27 */ public String getExtension(String fileName) {try { return fileName.split('.')[fileName.split('.').length - 1];} catch (Exception e) { return null;} }

以上就是Java 讀取網(wǎng)絡(luò)圖片存儲到本地并生成縮略圖的詳細內(nèi)容,更多關(guān)于Java 圖片存儲到本地并生成縮略圖的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 方源木业官网-四川木门-全国木门专业品牌 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 门禁卡_智能IC卡_滴胶卡制作_硅胶腕带-卡立方rfid定制厂家 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 粘度计,数显粘度计,指针旋转粘度计 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 |