當前位置:首頁 » 安卓系統 » android壓縮數據

android壓縮數據

發布時間: 2023-03-30 11:01:09

㈠ 安卓怎麼安裝壓縮文件格式軟體

1、首先下載手機端的解壓工具ZArchiver,下載地址:http://shouji..com/soft/item?docid=6503985&from=web_alad_6

2、安裝完成後,軟體界面如圖所示,確認安裝正確。軟體會自動顯示所有的文件目錄。

㈡ 可以自定義大小和像素來進行圖片壓縮的Android壓縮庫

老規矩 先上依賴

Add it in your root build.gradle at the end of repositories:

allprojects {

        repositories {

                ...   

                maven { url 'https://jitpack.io' }

        }

}

dependencies {

            implementation 'com.github.asnhkl1:X-CompressImage:1.0.1'

    }

背景:

對於一些需要對圖片進行定製化壓縮的場景,如必須圖片必須多少多少K以下,或者解析度有要求的場景。開發此庫。

你可以這樣用:

CompressConfig  為建造模式去設置參數

CompressConfig compressConfig = CompressConfig.builder()

                .setUnCompressMinPixel(1000) // 最小像素不壓縮,默認值:1000

                .setUnCompressNormalPixel(2000) // 標准像素不壓縮,默認值:2000

                .setMaxPixel(1200) // 長或寬不超過的最大像素 (單位px),默認值:1200

                .setMaxSize(200 * 1024) // 壓縮到的最大大小 (單位B),默認值:200 * 1024 = 200KB

                .enablePixelCompress(true) // 是否啟用像素壓縮,默認值:true

                .enableQualityCompress(true) // 是否啟用質量壓縮,默認值:true

                .enableReserveRaw(false) // 是否保留源文件,默認值:true

                .setCacheDir(path) // 壓縮後緩存圖片路徑,默認值:Constants.COMPRESS_CACHE

                .setShowCompressDialog(true) // 是否顯示壓縮進度條,默認值:false

                .create();

如果你僅僅只是壓縮圖片  我們給有默認的參數使用getDefaultConfig()

        this.unCompressMinPixel =1000;

        this.unCompressNormalPixel =2000;

        this.maxPixel =1200;

        this.maxSize =204800;

        this.enablePixelCompress =true;

        this.enableQualityCompress =true;

        this.enableReserveRaw =true;

下邊就是使用了 。很簡單 ,傳參加回調

     CompressImageManager.build(this,compressConfig, photos, new CompressImage.CompressListener() {

            @Override

            public void onCompressSuccess(ArrayList<Photo> var1) {

                Log.i("imageCompress","success");

              //do what you want to do

            }

            @Override

            public void onCompressFailed(ArrayList<Photo> var1, String var2) {

                Log.e("imageCompress","false",null);

            }

        }).compress();

git 地址:https://github.com/asnhkl1/X-CompressImage

歡迎指教,互相學習

㈢ android 如何壓縮png圖片位元組數

如果你只是覺得程序背景圖片大的話 這個應該是美工的問題 找個專業的美工設計下就Ok的

如果是程序中想壓縮圖片的話 網上的方法很多

下面代碼是將圖片按比例大小壓縮方法(根據Bitmap圖片壓縮)

java">privateBitmapcomp(Bitmapimage){

ByteArrayOutputStreambaos=newByteArrayOutputStream();
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中
}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());
BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds設回true了
newOpts.inJustDecodeBounds=true;
Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
newOpts.inJustDecodeBounds=false;
intw=newOpts.outWidth;
inth=newOpts.outHeight;
//現在主流手機比較多是800*480解析度,所以高和寬我們設置為
floathh=800f;//這里設置高度為800f
floatww=480f;//這里設置寬度為480f
//縮放比。由於是固定比例縮放,只用高或者寬其中一個數據進行計算即可
intbe=1;//be=1表示不縮放
if(w>h&&w>ww){//如果寬度大的話根據寬度固定大小縮放
be=(int)(newOpts.outWidth/ww);
}elseif(w<h&&h>hh){//如果高度高的話根據寬度固定大小縮放
be=(int)(newOpts.outHeight/hh);
}
if(be<=0)
be=1;
newOpts.inSampleSize=be;//設置縮放比例
newOpts.inPreferredConfig=Config.RGB_565;//降低圖片從ARGB888到RGB565
//重新讀入圖片,注意此時已經把options.inJustDecodeBounds設回false了
isBm=newByteArrayInputStream(baos.toByteArray());
bitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
}

【ps:看你自己的需要吧 給個地方做參考 http://my.eoe.cn/isnull/archive/564.html 你也可以搜索下 其他的方法 】

㈣ Android 音視頻01 --- H264的基本原理01

H264壓縮技術主要採用了以下幾種方法對視頻數據進行壓縮。包括:

解決的是空域數據冗餘問題。

解決的是時域數據冗徐問題

將空間上的相關性變為頻域上無關的數據然後進行量化。

經過壓縮後的幀分為:I幀,P幀和B幀:

關鍵幀,採用幀內壓縮技術。

向前參考幀,在壓縮時,只參考前面已經處理的幀。採用幀音壓縮技術。

雙向參考幀,在壓縮時,它即參考前而的幀,又參考它後面的幀。採用幀間壓縮技術。
除了I/P/B幀外,還有圖像序列GOP。

H264的基本原理其實非常簡單,下我們就簡單的描述一下H264壓縮數據的過程。通過攝像頭採集到的視頻幀(按每秒 30 幀算),被送到 H264 編碼器的緩沖區中。編碼器先要為每一幅圖片劃分宏塊。

劃分好宏塊後,計算宏塊的象素值。以此類推,計算一幅圖像中每個宏塊的像素值。

對於視頻數據主要有兩類數據冗餘,一類是時間上的數據冗餘,另一類是空間上的數據冗餘。其中時間上的數據冗餘是最大的。為什麼說時間上的冗餘是最大的呢?假設攝像頭每秒抓取30幀,這30幀的數據大部分情況下都是相關聯的。也有可能不止30幀的的數據,可能幾十幀,上百幀的數據都是關聯特別密切的。
H264編碼器會按順序,每次取出兩幅相鄰的幀進行宏塊比較,計算兩幀的相似度。如下圖:

在H264編碼器中將幀分組後,就要計算幀組內物體的運動矢量了。
H264編碼器首先按順序從緩沖區頭部取出兩幀視頻數據,然後進行宏塊掃描。當發現其中一幅圖片中有物體時,就在另一幅圖的鄰近位置(搜索窗口中)進行搜索。如果此時在另一幅圖中找到該物體,那麼就可以計算出物體的運動矢量了。
運動矢量計算出來後,將相同部分(也就是綠色部分)減去,就得到了補償數據。我們最終只需要將補償數據進行壓縮保存,以後在解碼時就可以恢復原圖了。壓縮補償後的數據只需要記錄很少的一點數據。
我們把運動矢量與補償稱為 幀間壓縮技術 ,它解決的是視頻幀在時間上的數據冗餘。除了幀間壓縮,幀內也要進行數據壓縮,幀內數據壓縮解決的是空間上的數據冗餘。

人眼對圖象都有一個識別度,對低頻的亮度很敏感,對高頻的亮度不太敏感。所以基於一些研究,可以將一幅圖像中人眼不敏感的數據去除掉。這樣就提出了幀內預測技術。
一幅圖像被劃分好宏塊後,對每個宏塊可以進行 9 種模式的預測。找出與原圖最接近的一種預測模式。然後,將原始圖像與幀內預測後的圖像相減得殘差值。再將我們之前得到的預測模式信息一起保存起來,這樣我們就可以在解碼時恢復原圖了,經過幀內與幀間的壓縮後,雖然數據有大幅減少,但還有優化的空間。

可以將殘差數據做整數離散餘弦變換,去掉數據的相關性,進一步壓縮數據。

上面的幀內壓縮是屬於有損壓縮技術。也就是說圖像被壓縮後,無法完全復原。而CABAC屬於無損壓縮技術。
無損壓縮技術大家最熟悉的可能就是哈夫曼編碼了,給高頻的詞一個短碼,給低頻詞一個長碼從而達到數據壓縮的目的。MPEG-2中使用的VLC就是這種演算法,我們以 A-Z 作為例子,A屬於高頻數據,Z屬於低頻數據。看看它是如何做的。
CABAC也是給高頻數據短碼,給低頻數據長碼。同時還會根據上下文相關性進行壓縮,這種方式又比VLC高效很多。

制定了相互傳輸的格式,將宏快 有組織,有結構,有順序的形成一系列的碼流。這種碼流既可 通過 InputStream 網路流的數據進行傳輸,也可以封裝成一個文件進行保存,主要作用是為了傳輸。

組成H264碼流的結構中 包含以下幾部分 ,從大到小排序依次是:
H264視頻序列,圖像,片組,片,NALU,宏塊 ,像素。

NAL層:(Network Abstraction Layer,視頻數據網路抽象層) : 它的作用是H264隻要在網路上傳輸,在傳輸的過程每個包乙太網是1500位元組,而H264的幀往往會大於1500位元組,所以要進行拆包,將一個幀拆成多個包進行傳輸,所有的拆包或者組包都是通過NAL層去處理的。
VCL層:(Video Coding Layer,視頻數據編碼層) : 對視頻原始數據進行壓縮

起始碼0x 00 00 00 01 或者 0x 00 00 01 作為 分隔符
兩個 0x 00 00 00 01之間的位元組數據 是表示一個NAL Unit。

I 幀的特點:

1.分組:把幾幀圖像分為一組(GOP,也就是一個序列),為防止運動變化,幀數不宜取多。
2.定義幀:將每組內各幀圖像定義為三種類型,即I幀、B幀和P幀;
3.預測幀:以I幀做為基礎幀,以I幀預測P幀,再由I幀和P幀預測B幀;
4.數據傳輸:最後將I幀數據與預測的差值信息進行存儲和傳輸。

1.更高的編碼效率:同H.263等標準的特率效率相比,能夠平均節省大於50%的碼率。
2.高質量的視頻畫面:H.264能夠在低碼率情況下提供高質量的視頻圖像,在較低帶寬上提供高質量的圖像傳輸是H.264的應用亮點。
3.提高網路適應能力:H.264可以工作在實時通信應用(如視頻會議)低延時模式下,也可以工作在沒有延時的視頻存儲或視頻流伺服器中。
4.採用混合編碼結構:同H.263相同,H.264也使用採用DCT變換編碼加DPCM的差分編碼的混合編碼結構,還增加了如多模式運動估計、幀內預測、多幀預測、基於內容的變長編碼、4x4二維整數變換等新的編碼方式,提高了編碼效率。
5.H.264的編碼選項較少:在H.263中編碼時往往需要設置相當多選項,增加了編碼的難度,而H.264做到了力求簡潔的「回歸基本」,降低了編碼時復雜度。
6.H.264可以應用在不同場合:H.264可以根據不同的環境使用不同的傳輸和播放速率,並且提供了豐富的錯誤處理工具,可以很好的控制或消除丟包和誤碼。
7.錯誤恢復功能:H.264提供了解決網路傳輸包丟失的問題的工具,適用於在高誤碼率傳輸的無線網路中傳輸視頻數據。
8.較高的復雜度:264性能的改進是以增加復雜性為代價而獲得的。據估計,H.264編碼的計算復雜度大約相當於H.263的3倍,解碼復雜度大約相當於H.263的2倍。
H.264的目標應用涵蓋了目前大部分的視頻服務,如有線電視遠程監控、交互媒體、數字電視、視頻會議、視頻點播、流媒體服務等。H.264為解決不同應用中的網路傳輸的差異。定義了兩層:視頻編碼層(VCL:Video Coding Layer)負責高效的視頻內容表示,網路提取層(NAL:Network Abstraction Layer)負責以網路所要求的恰當的方式對數據進行打包和傳送。

㈤ Android 網路框架解壓縮(gzip)淺談

六談這個話題,是因為很多時間都忽略了這個因素,網路傳輸數據的壓縮很少有人去關注,然而有時間提到這個問題的時間卻一時不知道怎麼回答,或者已經忘掉了這個概念...

進入正題,首先來聊聊Gzip。

Gzip是GNUZip的縮寫,他是一個GNU自由軟體的文件圧縮程序。

我們在進行網路傳輸數據時,經常用到json、xml等格式的數據,這些數據在傳輸前可以進行壓縮,這時候就會涉及到一種壓縮格式—Gzip。Gzip的壓縮比率非常大,有的甚至能達到99.9%以上,可以大大減少傳輸內容,提高用戶的傳輸速度,進而提高用戶的體驗。

http://tool.chinaz.com/Gzips/

https://gzip.51240.com/

比如我們通過第一個鏈接看一下「開源中國的新聞頁」,網址如下:

http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=0&pageSize=20

結果顯示,這個網頁沒有進行壓縮,源文件大小為12KB,而壓縮後,文件可減小到0.01KB,可以節省99.92%的傳輸控制項。這是什麼概念呢?相當於100MB的數據經過壓縮後不到1MB。

說道這里,我們先說一下Http中的Gzip技術細節

HTTP協議上的GZIP編碼是一種用來改進WEB應用程序性能的技術。一般伺服器中都安裝有這個功能模塊的,伺服器端不需做改動,當瀏覽器支持gzip 格式的時候, 伺服器端會傳輸gzip格式的蔽清數據。具體講就是 http request 頭中 有 "Accept-Encoding", "gzip" ,response 中就有返回頭Content-Encoding=gzip ,我們現在從瀏覽器上訪問玩啥網站都是gzip格式傳輸的。

同樣的的道理,我們可以在android 客戶端 request 頭中加入 "Accept-Encoding", "gzip" ,來讓伺服器傳送gzip 數據知並渣。

首先,客戶端發請求給服搭悄務端,會帶上請求頭:Accept-Encoding:gzip。第二步,服務端接收到請求頭後,可以選擇壓縮或不壓縮。第三步,服務端選擇壓縮後,文件明顯變小,同時在響應頭加上Content-Encoding:gzip。第四步,客戶端接收到響應後,根據響應頭中是否帶有Content-Encoding:gzip,判斷文件是否被壓縮,如果壓縮就進行解壓,如果沒有壓縮,就按照正常方式讀取數據即可。

OKhttp3.4.0開始將這些邏輯抽離到了內置的interceptor中,看起來較為方便

在 BridgeInterceptor.java 這個類里邊可以看到

如果header中沒有Accept-Encoding,默認自動添加 ,且標記變數transparentGzip為true。

針對返回結果,如果同時滿足以下三個條件:

移除 Content-Encoding、Content-Length,並對結果進行解壓縮。

可以看到以上邏輯完成了,由此我們通過OkHttp源碼得出以下結論:

由於引用太多源碼就不寫了,直接針對以上6點做結果分析

         Android』s HTTP Clients

         HttpURLConnection

         HTTP 協議中的 Transfer-Encoding

㈥ android圖片壓縮避免OOM

簡單吹下牛:很多app都會要載入圖片,但是如果不壓縮圖片就很容易OOM,

個人看來OOM 出現原因總的來說分為兩種:

一種是內存溢出(好像在扯淡,OOM本身就是內存溢出)

另一種是:圖片過大,一個屏幕顯示不完全造成,似乎也是一。。 如有錯誤純屬扯淡;

為了避免上面的情況:載入圖片的時候可以進行壓縮,上傳的時候要可以進行壓縮,在圖片不可見的時候進行回收(onDetach()),再吹一句 用了fresco+壓縮之後載入圖片完全沒問題了。

一、質量壓縮方法:

privateBitmap compressImage(Bitmap image) {

ByteArrayOutputStream baos =newByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG,100, baos);//質量壓縮方法,這里100表示不壓縮,把壓縮後的數據存放到baos中

intoptions =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 =newByteArrayInputStream(baos.toByteArray());//把壓縮後的數據baos存放到ByteArrayInputStream中

Bitmap bitmap = BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream數據生成圖片

returnbitmap;

}

二、圖片按比例大小壓縮方法(根據Bitmap圖片壓縮)

privateBitmap comp(Bitmap image) {

ByteArrayOutputStream baos =newByteArrayOutputStream();

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 =newByteArrayInputStream(baos.toByteArray());

BitmapFactory.Options newOpts =newBitmapFactory.Options();

//開始讀入圖片,此時把options.inJustDecodeBounds 設回true了

newOpts.inJustDecodeBounds =true;

Bitmap bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);

newOpts.inJustDecodeBounds =false;

intw = newOpts.outWidth;

inth = newOpts.outHeight;

//現在主流手機比較多是800*480解析度,所以高和寬我們設置為

floathh = 800f;//這里設置高度為800f

floatww = 480f;//這里設置寬度為480f

//縮放比。由於是固定比例縮放,只用高或者寬其中一個數據進行計算即可

intbe =1;//be=1表示不縮放

if(w > h && w > ww) {//如果寬度大的話根據寬度固定大小縮放

be = (int) (newOpts.outWidth / ww);

}elseif(w < h && h > hh) {//如果高度高的話根據寬度固定大小縮放

be = (int) (newOpts.outHeight / hh);

}

if(be <=0)

be =1;

newOpts.inSampleSize = be;//設置縮放比例

//重新讀入圖片,注意此時已經把options.inJustDecodeBounds 設回false了

isBm =newByteArrayInputStream(baos.toByteArray());

bitmap = BitmapFactory.decodeStream(isBm,null, newOpts);

returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮

}

㈦ Android黑科技,圖片終極壓縮

一、支持自定義配置、不失真和批量處理

二、圖片上傳為什麼要壓縮
1、圖片伺服器空間限制,磁碟昂貴
2、網路不穩定,大文件需要斷點續傳
3、盡可能避免安卓OOM異常
4、後台約定的規則<200KB
5、需要上傳原圖的應用有醫院臨床項目、金融銀行

三、圖片壓縮流程
1、遞歸每張圖片
2、設置圖片格式 Bitmap.CompressFormat.JPG
png, jpg,webp
3、質量壓縮bitmap.compress(format,quality,baos)
由於png是無損壓縮,所以設置quality無效(不適合作為縮略圖)
采樣率壓縮BitmapFactory.Options.inSampleSize
縮小圖片解析度,減少所佔用磁碟空間和內存大小
縮放壓縮canvas.drawBitmap(bitmap, null,rectF,null)
減少圖片的像素,降低所佔用磁碟空間大小和內存大小,可用於緩存縮略圖
JNI調用JPEG庫
Android的圖片引擎使用的是閹割版的skia引擎,去掉了圖片壓縮中的哈夫曼演算法
4、像素修復
5、返回壓縮
6、完成壓縮

demo: https://github.com/ApeCold/Learn_Compress_Sample

參考:
Luban框架 https://github.com/Curzibn/Luban
缺點
1、當沒有設定壓縮路徑時,拋異常無閃退
2、源碼中,壓縮比率固定值60,無法修改
3、壓縮配置,參數不太適應真實項目需求
4、不能指定壓縮大小,比如100KB以內
https://github.com/zettsu/Compressor

熱點內容
如何在伺服器中添加字 發布:2024-04-24 10:21:43 瀏覽:361
代寫Python 發布:2024-04-24 10:19:08 瀏覽:768
安卓手機如何破九宮鎖 發布:2024-04-24 10:05:47 瀏覽:676
攝像頭要什麼樣的配置好 發布:2024-04-24 09:30:24 瀏覽:365
存儲過程定義多個變數 發布:2024-04-24 09:04:13 瀏覽:762
為什麼安卓手機不值錢 發布:2024-04-24 09:02:40 瀏覽:100
拱度計演算法 發布:2024-04-24 08:53:09 瀏覽:290
windowsefs加密 發布:2024-04-24 08:51:30 瀏覽:879
英雄聯盟和飢荒哪個配置要求更高 發布:2024-04-24 07:55:09 瀏覽:604
linuxcpu佔用進程 發布:2024-04-24 07:37:05 瀏覽:120