導航:首頁 > 文件處理 > android壓縮byte

android壓縮byte

發布時間:2023-07-20 06:54:34

android byte和byte的區別

估計題寫錯了哇byte與int的區別:
主要是存儲空間的大小和取值范圍不同。
byte佔用1個位元組存儲空間,取值范圍-128~127
int佔用4個位元組存儲空間,取值范圍-2的31次方~2的31次方-1

⑵ android compress 壓縮 會不會失真

微信的縮略圖要求是不大於32k,這就需要對我的圖片進行壓縮。試了幾種方法,一一道來。

代碼如下

ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100 , baos);
int options = 100 ;
while ( baos.toByteArray().length / 1024 > 32 ) {
baos.reset();
image.compress(Bitmap.CompressFormat.JPEG, options, baos);
options -= 10 ;
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null , null );
最開始使用這個來進行壓縮,但是始終壓縮不到32k這么小。後來看高手的解釋才明白,這種壓縮方法之所以稱之為質量壓縮,是因為它不會減少圖片的像素。它是在保持像素的前提下改變圖片的位深及透明度等,來達到壓縮圖片的目的。進過它壓縮的圖片文件大小會有改變,但是導入成bitmap後佔得內存是不變的。因為要保持像素不變,所以它就無法無限壓縮,到達一個值之後就不會繼續變小了。顯然這個方法並不適用與縮略圖,其實也不適用於想通過壓縮圖片減少內存的適用,僅僅適用於想在保證圖片質量的同時減少文件大小的情況而已。
2、采樣率壓縮法:

代碼如下

ByteArrayOutputStream out = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, out);
BitmapFactory.Options newOpts = new BitmapFactory.Options();
int be = 2;
newOpts.inSampleSize = be;
ByteArrayInputStream isBm = new ByteArrayInputStream(out.toByteArray());
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null , null );
第二個使用的是這個方法,可以將圖片壓縮到足夠小,但是也有一些問題。因為采樣率是整數,所以不能很好的保證圖片的質量。如我們需要的是在2和3采樣率之間,用2的話圖片就大了一點,但是用3的話圖片質量就會有很明顯的下降。這樣也無法完全滿足我的需要。不過這個方法的好處是大大的縮小了內存的使用,在讀存儲器上的圖片時,如果不需要高清的效果,可以先只讀取圖片的邊,通過寬和高設定好取樣率後再載入圖片,這樣就不會過多的佔用內存。如下

BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true ;
Bitmap bitmap = BitmapFactory.decodeFile(path,newOpts);
newOpts.inJustDecodeBounds = false ;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
//計算出取樣率
newOpts.inSampleSize = be;
bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
這樣的好處是不會先將大圖片讀入內存,大大減少了內存的使用,也不必考慮將大圖片讀入內存後的釋放事宜。
轉載

⑶ 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上傳圖片到php android用bitmap.compress壓縮為byte流 php怎麼解壓轉為圖片啊

android 文件上傳,自己封裝了個方法,
<?php
var_mp($_POST);
var_mp($_FILES);
foreach($_FILES as $key => $value){
move_uploaded_file($_FILES[$key]['tmp_name'],
$_SERVER['DOCUMENT_ROOT'].'/FileUpload/files/'.$_FILES[$key]['name']);
}
?>
PHP就這樣接受了

⑸ android藍牙通信、byte轉換方面的問題

覺得你這幾個方法都要改寫吧。
通常協議操作絕不能用String作為交換格式。
多次轉碼。導致數據變形,
特別是「同步頭(2B) 包類型(1B) 數據長度(2B) 」
這個數據從byte[] ->String->byte[]多次轉換,100%會導致數據變化。
通常只在byte[]上操作,改成
private byte[]getPackage();
private byte[] getHead(byte []);
sendMessage(byte[]);
這幾個方法都改成byte[],不然即使強調硬扭弄對也有運氣成分。

System.out.println("原head:"+Arrays.toString(head));
String t=new String(head,"GB2312")+"hello world";
System.out.println("合並gb文本:"+t);
System.out.println("還原的head:"+Arrays.toString(t.getBytes("gb2312")));
=========
原head:[85, -86, -32, -2, -36]
合並gb文本:U��hello world
還原的head:[85, 63, 63, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

用還原後,前5個位元組中出現負值的都完全變化,即根本不能用String作為位元組的交換格式。

回問被吞了?我也沒看到..

⑹ Android 怎樣用sqlite儲存byte數組

在進行Android開發過程中,我們經常會接觸到Drawable對象(官方開發文檔:A Drawable is a general abstraction for "something that can be drawn."),那麼,若要使用資料庫來進行存儲及讀取.

@Override
public void onCreate(SQLiteDatabase database) {
executeSQLScript(database, "create.sql");
}

private void executeSQLScript(SQLiteDatabase database, string dbname){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte buf[] = new byte[1024];
int len;
AssetManager assetManager = context.getAssets();
InputStream inputStream = null;

try{
inputStream = assetManager.open(dbname);
while ((len = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();
String[] createScript = outputStream.toString().split(";");
for (int i = 0; i < createScript.length; i++) {
String sqlStatement = createScript[i].trim();
// TODO You may want to parse out comments here
if (sqlStatement.length() > 0) {
database.execSQL(sqlStatement + ";");
}
}
} catch (IOException e){
// TODO Handle Script Failed to Load
} catch (SQLException e) {
// TODO Handle Script Failed to Execute
}
}

⑺ android用ZipOutputStream壓縮byte數組怎麼壓縮呀求代碼!在線等,急!!!

OutputStream os = ...
byte[] bytes = ...
GZIPOutputStream zos = new GZIPOutputStream(new BufferedOutputStream(os));
try {
zos.write(bytes);
} finally {
zos.close();
}

android API 文檔中,都有說明

⑻ android如何把byte數據存到內存中並轉為bitmap,求高手~~~~~~~~~~~~~~~~~~~~~~~~~~~

import java.io.File;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainAct extends Activity {
private ImageView img;
//圖片路徑
private String filepath = "/sdcard/sample.jpg";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView) findViewById(R.id.img);
File file = new File(filepath);
if (file.exists()) {
Bitmap bm = BitmapFactory.decodeFile(filepath);
//將圖片顯示到ImageView中
img.setImageBitmap(bm);
}
}
}

請參考

閱讀全文

與android壓縮byte相關的資料

熱點內容
sha1withrsa演算法 瀏覽:453
域名交易系統源碼php 瀏覽:171
求解微分方程數值解的命令有哪些 瀏覽:626
程序員轉時尚傳媒 瀏覽:82
古拳譜pdf 瀏覽:42
一元二次方程無實數根的演算法 瀏覽:352
程序員測試輕松嗎 瀏覽:170
英雄聯盟神魔怎麼綁定伺服器 瀏覽:982
音樂app怎麼換音質 瀏覽:974
python進階客戶流失 瀏覽:280
華為榮耀10伺服器地址 瀏覽:998
javastring相等判斷 瀏覽:411
程序員考研究生學校 瀏覽:935
java卡頓 瀏覽:500
編程軟體怎麼運行zip文件 瀏覽:505
單片機怎麼做組態 瀏覽:899
android參考文獻外文 瀏覽:684
銅電極電流效率的演算法 瀏覽:142
簡訊內存已滿怎麼處理安卓 瀏覽:312
ogg命令 瀏覽:784