android 比較靠譜的圖片壓縮

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

第一:我們先看下質量壓縮方法:

private Bitmap compressImage(Bitmap image) {  ByteArrayOutputStream baos = new ByteArrayOutputStream();  image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這里100表示不壓縮,把壓縮后的數據存放到baos中  int options = 100;  while ( baos.toByteArray().length / 1024>100) {  //循環判斷如果壓縮后圖片是否大于100kb,大于繼續壓縮         baos.reset();//重置baos即清空baos  image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這里壓縮options%,把壓縮后的數據存放到baos中  options -= 10;//每次都減少10  }  ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮后的數據baos存放到ByteArrayInputStream中  Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數據生成圖片  return bitmap;  }  

第二:圖片按比例大小壓縮方法(根據路徑獲取圖片并壓縮):

private Bitmap getimage(String srcPath) {  BitmapFactory.Options newOpts = new BitmapFactory.Options();  //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了  newOpts.inJustDecodeBounds = true;  Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此時返回bm為空  newOpts.inJustDecodeBounds = false;  int w = newOpts.outWidth;  int h = newOpts.outHeight;  //現在主流手機比較多是800*480分辨率,所以高和寬我們設置為  float hh = 800f;//這里設置高度為800f  float ww = 480f;//這里設置寬度為480f  //縮放比。由于是固定比例縮放,只用高或者寬其中一個數據進行計算即可  int be = 1;//be=1表示不縮放  if (w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放  be = (int) (newOpts.outWidth / ww);  } else if (w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放  be = (int) (newOpts.outHeight / hh);  }  if (be <= 0)  be = 1;  newOpts.inSampleSize = be;//設置縮放比例  //重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了  bitmap = BitmapFactory.decodeFile(srcPath, newOpts);  return compressImage(bitmap);//壓縮好比例大小后再進行質量壓縮  }  

第三:圖片按比例大小壓縮方法(根據Bitmap圖片壓縮):

private Bitmap comp(Bitmap image) {  ByteArrayOutputStream baos = new ByteArrayOutputStream();         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  if( baos.toByteArray().length / 1024>1024) {//判斷如果圖片大于1M,進行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢出    baos.reset();//重置baos即清空baos  image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//這里壓縮50%,把壓縮后的數據存放到baos中  }  ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  BitmapFactory.Options newOpts = new BitmapFactory.Options();  //開始讀入圖片,此時把options.inJustDecodeBounds 設回true了  newOpts.inJustDecodeBounds = true;  Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  newOpts.inJustDecodeBounds = false;  int w = newOpts.outWidth;  int h = newOpts.outHeight;  //現在主流手機比較多是800*480分辨率,所以高和寬我們設置為  float hh = 800f;//這里設置高度為800f  float ww = 480f;//這里設置寬度為480f  //縮放比。由于是固定比例縮放,只用高或者寬其中一個數據進行計算即可  int be = 1;//be=1表示不縮放  if (w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放  be = (int) (newOpts.outWidth / ww);  } else if (w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放  be = (int) (newOpts.outHeight / hh);  }  if (be <= 0)  be = 1;  newOpts.inSampleSize = be;//設置縮放比例  //重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了  isBm = new ByteArrayInputStream(baos.toByteArray());  bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  return compressImage(bitmap);//壓縮好比例大小后再進行質量壓縮  
}  

轉載于:https://my.oschina.net/yongqingfan/blog/737256

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458021.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jetty上手

jetty簡介&#xff1a;維基百科 Jetty是一個純粹的基于Java的網頁服務器和Java Servlet容器。盡管網頁服務器通常用來為人們呈現文檔&#xff0c;但是Jetty通常在較大的軟件框架中用于計算機與計算機之間的通信。Jetty支持最新的Java Servlet API&#xff08;帶JSP的支持&#…

常用公差配合表圖_ER彈簧夾頭配套BT刀柄常用規格型號表

ER彈簧夾頭具有定心精度高&#xff0c;夾緊力均勻的特點&#xff0c;廣泛用于機械類零件的精加工和半精加工&#xff0c;通常與BT刀柄匹配使用。BT刀柄是是機械主軸與刀具和其它附件工具連接件&#xff0c;BT為日本標準(MAS403)&#xff0c;現在也是普遍使用的一種標準。傳統刀…

Spatial Transformer Networks(STN)

詳細解讀Spatial Transformer Networks&#xff08;STN&#xff09;-一篇文章讓你完全理解STN了_多元思考力-CSDN博客_stn

Linux下python安裝升級詳細步驟 | Python2 升級 Python3

Linux下python升級步驟 Python2 ->Python3 多數情況下&#xff0c;系統自動的Python版本是2.x 或者yum直接安裝的也是2.x 但是&#xff0c;現在多數情況下建議使用3.x 那么如何升級呢&#xff1f; 下面老徐詳細講解升級步驟&#xff1b; 首先下載源tar包 可利用linux自帶下…

華為手機連電腦_手機、電腦無網高速互傳!華為神技逆天

Huawei Share是華為的一項自研多終端傳輸技術&#xff0c;可以在沒有網絡狀態下實現手機與手機、電腦等多終端設備間快速穩定的文件分享&#xff0c;尤其是在辦公場景下&#xff0c;可以極大提升辦公效率。華為表示&#xff0c;未來Huawei Share將應用于更多全場景跨設備無縫分…

【無標題】移動端深度學習開源框架及部署(對比)

移動端深度學習開源框架及部署 - 凌逆戰 - 博客園

Github基本操作的學習與溫習

GitHub是最先進的分布式版本控制工具&#xff0c;下面是我學習中總結的操作流程&#xff0c;僅供參考 -----------------------------------------------------------------------------------------------------------------------------------------------------------------…

excel統計行數_值得收藏的6個Excel函數公式(有講解)

收藏的Excel函數大全公式再多&#xff0c;幾天不用也會忘記。怎么才能不忘&#xff1f;你需要了解公式的運行原理。小編今天不再推送一大堆函數公式&#xff0c;而是根據提問最多的問題&#xff0c;精選出6個實用的&#xff0c;然后詳細的解釋給大家。1、計算兩個時間差TEXT(B2…

Studio One正版多少錢 Studio One正版怎么購買

隨著版權意識的增強&#xff0c;打擊盜版的力度越來越大&#xff0c;現在網絡上的盜版資源越來越少&#xff0c;資源少很難找是一方面&#xff0c;另一方面使用盜版軟件不僅很多功能不能使用&#xff0c;而且很多盜版軟件都被植入各種木馬病毒&#xff0c;從而帶來各種各樣的風…

DNS簡述

常見DNS記錄SOA&#xff1a;域權威開始NS&#xff1a;權威域名服務器A&#xff1a;主機地址CNAME&#xff1a;別名對應的正規名稱MX&#xff1a;郵件傳遞服務器PTR&#xff1a;域名指針 (用于反向 DNS)查詢過程瀏覽器緩存->hosts->LDNS->LDNS緩存->ISP->ISP緩存…

cuda gpu相關匯總

1.Ubuntu16.04:在anaconda下安裝pytorch-gpu 轉自&#xff1a;Ubuntu16.04:在anaconda下安裝pytorch-gpu_莫等閑996的博客-CSDN博客 1 創建虛擬環境并進入 conda create -n pytorch-gpu python3.6 conda activate pytorch-gpu 2 下載對應的安裝包和配件 方法一(推薦)&#…

普通人學python有意義嗎_學python難嗎

首先&#xff0c;對于初學者來說學習Python是不錯的選擇&#xff0c;一方面Python語言的語法比較簡單易學&#xff0c;另一方面Python的實驗環境也比較容易搭建。學習Python需要的時間取決于三方面因素。(推薦學習&#xff1a;Python視頻教程)其一是學習者是否具有一定的計算機…

karatsuba乘法

karatsuba乘法 Karatsuba乘法是一種快速乘法。此算法在1960年由Anatolii Alexeevitch Karatsuba 提出&#xff0c;并于1962年得以發表。[1]此算法主要用于兩個大數相乘。普通乘法的復雜度是n2&#xff0c;而Karatsuba算法的復雜度僅為3nlog3≈3n1.585&#xff08;log3是以2為底…

在Visual Studio上開發Node.js程序(2)——遠程調試及發布到Azure

【題外話】 上次介紹了VS上開發Node.js的插件Node.js Tools for Visual Studio&#xff08;NTVS&#xff09;&#xff0c;其提供了非常方便的開發和調試功能&#xff0c;當然很多情況下由于平臺限制等原因需要在其他機器上運行程序&#xff0c;進而需要遠程調試功能&#xff0c…

服務器定期監控數據_基礎設施硬件監控探索與實踐

本文選自 《交易技術前沿》總第三十六期文章(2019年9月)陳靖宇深圳證券交易所 系統運行部Email: jingyuchenszse.cn摘要&#xff1a;為了應對基礎設施規模不斷上升&#xff0c;數據中心兩地三中心帶來的運維挑戰&#xff0c;深交所結合現有基礎設施現狀&#xff0c;以通用性、靈…

LeetCode206:Reverse Linked List

Reverse a singly linked list. 分別用迭代和遞歸實現 struct ListNode {int val;struct ListNode *next; }; 迭代實現&#xff1a; struct ListNode* reverseList(struct ListNode* head) {struct ListNode *pre NULL;struct ListNode *cur head;while( cur ! NULL ){struct…

VS2010問題匯總

問題1&#xff1a;error C3872: "0xa0": 此字符不允許在標識符中使用 error C3872: "0xa0": 此字符不允許在標識符中使用 或者 error C3872: 0xa0: this character is not allowed in an identifier 解法&#xff1a;這是因為直接復制代碼的問題。0xa0是…

交叉編譯HTOP并移植到ARM嵌入式Linux系統

原創作品&#xff0c;允許轉載&#xff0c;轉載時請務必以超鏈接形式標明文章、作者信息和本聲明&#xff0c;否則將追究法律責任。 最近一直在完善基于Busybox做的ARM Linux的根文件系統&#xff0c;由于busybox是一個精簡的指令集組成的簡單文件系統&#xff0c;其優點就是極…

vue如何獲取年月日_好程序員web前端教程分享Vue相關面試題

好程序員web前端教程分享Vue相關面試題&#xff0c;Vue是一套構建用戶界面的漸進式框架&#xff0c;具有簡單易用、性能好、前后端分離等優勢&#xff0c;是web前端工程師工作的好幫手&#xff0c;也是企業選拔人才時考察的重點技能。接下來好程序員web前端教程資源就給大家分享…

Underscore.js (1.7.0)-函數預覽

集合&#xff08;Collections&#xff09;(25) - each- map- reduce- reduceRight- find- filter- where- findWhere- reject- every- some- contains- invoke- pluck- max- min- sortBy- groupBy- indexBy- countBy- shuffle- sample- toArray- size- partition數組&#xff0…