99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb(CDA內(nèi)容分享)
什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb(CDA內(nèi)容分享)
2022-01-12
收藏

作者:豆豆

來源:Python 技術(shù)

前兩天刷知乎熱搜看到一篇帖子,某省會城市健康碼連續(xù)兩次崩潰,相關(guān)公司在之前的報(bào)道中還聲稱:用兩天兩夜,將 1M 圖片優(yōu)化到 100kb。

什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb

報(bào)道中提到:“為了確保系統(tǒng)運(yùn)行更高效,他們將一張圖片從 1MB 壓縮到 500 KB,再從 500KB 優(yōu)化到 100kb?!?/span>

同時(shí)還聲稱,這樣的工作看似簡單,卻蘊(yùn)含著高技術(shù)含量,工程師連續(xù)兩天兩夜守在電腦前,終于攻下難關(guān)。

關(guān)于健康碼崩潰的事網(wǎng)上眾說紛紜,但消息肯定真有假,就坐等官方發(fā)布最終消息就好了。不信謠不傳謠。

今天咱們就單純來討論下圖像壓縮這件事。

關(guān)于圖像壓縮,工作中肯定是少不了的,尤其是涉及到圖片傳輸和存儲的時(shí)候,比如微信、微博、知乎等都需要考慮如此大批量的圖片如何存儲的問題。

都知道,咱 Python 是有很多圖像庫的,那想搞一下圖像壓縮還不是手到擒來,

PIL

PIL 是 Python Image Library 的簡稱,其功能非常強(qiáng)大,短短三行代碼即可實(shí)現(xiàn)圖像的壓縮

咱們先來看下原圖。

什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb
from PIL import Image

im = Image.open("girl.jpg")
im.save("girl-out2.jpg", quality=10) # quality 是壓縮比率 

來看下壓縮之后的。

什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb

從以上壓縮結(jié)果來看,quality 設(shè)置為 10 時(shí)從 2.5MB 壓縮到了 400KB,整體效果還是不錯(cuò)的。但整體來看圖片是有一定的失真的,尤其是突然將圖片放大之后,失真更明顯,不信你看。

什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb

經(jīng)過多次實(shí)驗(yàn),發(fā)現(xiàn)將 quality 設(shè)置為 20 效果最佳。此時(shí)圖像最終大小壓縮到了 500KB,而且圖片也不會失真。

事實(shí)上,PIL 提供了很多方法對圖片進(jìn)行縮放,下面咱們再試試另外一種辦法。

from PIL import Image

im = Image.open("girl.jpg")
w, h = im.size
im.thumbnail((w // 2, h // 2)) im.save("girl-out.jpg")
什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb

在上面的代碼中,我們先獲得了圖片的原始尺寸,然后直接將圖片縮放至原來的百分之五十。最終圖片大小為 343KB,而且圖片看起來也不會失真。

由此可見,thumbnail() 的效果要比設(shè)定 quality 的效果要好一些。

當(dāng)然,PIL 還提供了 resize() 函數(shù)來對圖片進(jìn)行縮放,小伙伴們可以自行嘗試下哦。

OpenCV

OpenCV 也是一個(gè)比較好用的操作圖像的庫,四行代碼實(shí)現(xiàn)圖片縮放。

import cv2 as cv

img = cv.imread("girl.jpg")
resize_img = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imwrite('girl-out3.jpg', resize_img)
什么!竟然有人把圖片從 1M 優(yōu)化到 1024kb

在以上的代碼中,我們先將原始圖片讀入進(jìn)來,之后縮放至原圖的四分之一。從結(jié)果來看,效果還算可以。大小合適,圖像沒有明顯的失真。

總結(jié)

今天給大家介紹了兩款高質(zhì)量圖像處理庫,從結(jié)果來看,二者的壓縮效果是差不多的。事實(shí)上,這兩個(gè)庫不僅適用于圖像壓縮,還有很多高級玩法,這個(gè)就要靠小伙伴們自行解鎖了。

除了本文所說的兩個(gè)圖像操作庫,你還知道哪些方便好用的圖像庫么,可以在評論區(qū)和大家分享一下呀~

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }