android縮小圖片
A. 用安卓手機怎樣使照片小於500k
手機上面可以使用美圖秀秀來製作。
操作方法:
1、首先,打開手機上面的美圖秀秀進入,選擇界面上方的圖片美化。
B. Android圖片壓縮與優化的幾種方式
1.使用的圖片最好用png格式
2.如果你的圖片仍然大的話可以在項目裡面點擊右鍵選擇convert to Webp,轉成webp格式圖片可以變小很多!
C. android中如何動態修改ImageView中圖片的大小 比如說點擊該圖片後圖片能變大
使用點陣圖(Bitmap)再重新繪制遍
//原點陣圖
Bitmap btm1 = BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.hh);
BitmapDrawable bd1=BitmapDrawable(btm1);
imageView.setBackgroundDrawable(bd1);
放大後 滑動時計算 圖片的邊是否在屏幕外,如果在屏幕外就可移動,比如 向上滑動,是想看圖片下面的部分,此時計算圖片的底邊是否在屏幕外,如果是,就可以向上移動圖片。
Scaletype的設置的方式包括:
1、在layout xml中定義android:scaleType="CENTER"
2、或在代碼中調用imageView.setScaleType(ImageView.ScaleType.CENTER);
(3)android縮小圖片擴展閱讀:
根據位深度,可將點陣圖分為1、4、8、16、24及32點陣圖像等。每個像素使用的信息位數越多,可用的顏色就越多,顏色表現就越逼真,相應的數據量越大。
例如,位深度為 1 的像素點陣圖只有兩個可能的值(黑色和白色),所以又稱為二值點陣圖。位深度為 8 的圖像有 2^8(即 256)個可能的值。位深度為 8 的灰度模式圖像有 256 個可能的灰色值。
RGB圖像由三個顏色通道組成。8 位/通道的 RGB 圖像中的每個通道有 256 個可能的值,這意味著該圖像有 1600 萬個以上可能的顏色值。
有時將帶有 8 位/通道 (bpc) 的 RGB 圖像稱作 24 點陣圖像(8 位 x 3 通道 = 24 位數據/像素)。通常將使用24位RGB組合數據位表示的的點陣圖稱為真彩色點陣圖。
D. android 圖片質量壓縮和尺寸壓縮有什麼區別
這個方法用來將特定格式的壓縮圖片寫入輸出流(OutputStream)中,當然例如輸出流與文件聯系在一起,壓縮後的圖片也就是一個文件。如果壓縮成功則返回true,其中有三個參數:
format是壓縮後的圖片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。
quality的取值范圍為[0,100],值越小,經過壓縮後圖片失真越嚴重,當然圖片文件也會越小。(PNG格式的圖片會忽略這個值的設定)
stream指定壓縮的圖片輸出的地方,比如某文件。
上述方法還有一個值得注意的地方是:當用BitmapFactory decode文件時可能返回一個跟原圖片不同位深的圖片,或者丟失了每個像素的透明值(alpha),比如說,JPEG格式的圖片僅僅支持不透明的像素。文章android圖片壓縮在文末提到的下面這點可能就是這個原因:
當調用bitmap.compress(CompressFormat.JPEG, 100, fos);保存為圖片時發現圖片背景為黑色,如下圖:
下面是質量壓縮的代碼:
(Bitmapbmp,Filefile){
ByteArrayOutputStreambaos=newByteArrayOutputStream();
intoptions=80;//個人喜歡從80開始,
bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);
while(baos.toByteArray().length/1024>100){
baos.reset();
options-=10;
bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);
}
try{
FileOutputStreamfos=newFileOutputStream(file);
fos.write(baos.toByteArray());
fos.flush();
fos.close();
}catch(Exceptione){
e.printStackTrace();
}
}
這段代碼來自Android圖片壓縮總結,我根據自己的需求改了改,但是大同小異,所以就直接貼了。
隨著代碼中的option逐漸變小,我們可以在logcat中列印baos的大小來查看圖片的大小。我們也可以去掉while的循環條件,一直壓縮下去看效果,最終一張照片可能就由原來的3、4M變成了幾百K甚至幾百B了。我在試的過程中將option設置成100,壓縮後偶爾會出現一張3、4M的圖片經過壓縮後竟變成了6、7M,這里還是有點困惑,不知道為什麼。
隨後,我想把這個壓縮後的圖片(1、200KB)填充到ImageView中時卻失敗了,logcat中提示圖片過大!這就是文章開頭提到的問題,雖然我們通過質量壓縮使File形式的圖片文件縮小了,但是並沒有改變圖片的寬高,原先是1080*1920解析度的圖片經壓縮後還是1080*1920,而File格式轉換成Bitmap格式進入到內存中時,內存是根據圖片的像素數量來給圖片分配內存大小的,還是有好幾M,因此填充ImageView失敗。
順便提一下,可以用bitmap.getByteCount()獲取存儲bitmap像素的內存大小,但是KITKAT(Android 4.4版本)以後用getAllocateByteCount()獲取。一般情況下,後者返回值比前者大,比如,當bitmap被重用去decode另外更小的bitmaps時,或者被人為地配置一下屬性值,比如setWidth()、setHeight()、reconfigure()時,如果bitmap不做以上操作,二者的返回值應該是一樣的。(譯文,不太懂)
二、尺寸壓縮
特點: 通過設置采樣率, 減少圖片的像素, 達到對內存中的Bitmap進行壓縮
我們主要通過BitmapFactory中的decodeFile方法對圖片進行尺寸壓縮:
publicstaticBitmapdecodeFile(StringpathName,BitmapFactory.Optionsopts)
public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)
其中有兩個參數:
pathName是圖片文件的路徑。
opts 就是所謂的采樣率,它里邊有很多屬性可以設置,我們通過設置屬性來達到根據自己的需要,壓縮出指定的圖片。其中比較常用的屬性有:
booleaninJustDecodeBounds—— 如果設置為true,則只讀取bitmap的寬高,而忽略內容。
intinSampleSize—— 如果>1,調用decodeFile方法後,就會得到一個更小的bitmap對象(已壓縮)。比如設置為2,那麼新Bitmap的寬高都會是原Bitmap寬高的1/2,總體大小自然就是原來的1/4了,以此類推。
booleaninPurgeable—— 如果設置為true,壓縮後的圖片像素占的內存將會在系統清理內存的時候被回收掉,當像素的信息再次被用到時將會自動重新decode該像素(比如getPixels()時)。(慎用!重復decode可以會造成UI的卡頓,API level 21 已棄用)
booleaninInputShareable—— 與inPurgeable配合使用,如果inPurgeable設置成false,自動忽略此值,如果inPurgeable為true,此值決定是否該bitmap能分享引用給輸入數據(inputstream,array等),或者必須進行深拷貝。API level 21 已棄用。(這是譯文,不太理解!!!)
下面是一段實現的代碼
privateBitmapsizeCompres(Stringpath,intrqsW,intrqsH){
//用option設置返回的bitmap對象的一些屬性參數
finalBitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=true;//設置僅讀取Bitmap的寬高而不讀取內容
BitmapFactory.decodeFile(path,options);//獲取到圖片的寬高,放在option里邊
finalintheight=options.outHeight;//圖片的高度放在option里的outHeight屬性中
finalintwidth=options.outWidth;
intinSampleSize=1;
if(rqsW==0||rqsH==0){
options.inSampleSize=1;
}elseif(height>rqsH||width>rqsW){
finalintheightRatio=Math.round((float)height/(float)rqsH);
finalintwidthRatio=Math.round((float)width/(float)rqsW);
inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;
options.inSampleSize=inSampleSize;
}
returnBitmapFactory.decodeFile(path,options);//主要通過option里的inSampleSize對原圖片進行按比例壓縮
}
private Bitmap sizeCompres(String path, int rqsW, int rqsH) {
// 用option設置返回的bitmap對象的一些屬性參數
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;// 設置僅讀取Bitmap的寬高而不讀取內容
BitmapFactory.decodeFile(path, options);// 獲取到圖片的寬高,放在option里邊
final int height = options.outHeight;//圖片的高度放在option里的outHeight屬性中
final int width = options.outWidth;
int inSampleSize = 1;
if (rqsW == 0 || rqsH == 0) {
options.inSampleSize = 1;
} else if (height > rqsH || width > rqsW) {
final int heightRatio = Math.round((float) height / (float) rqsH);
final int widthRatio = Math.round((float) width / (float) rqsW);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
options.inSampleSize = inSampleSize;
}
return BitmapFactory.decodeFile(path, options);// 主要通過option里的inSampleSize對原圖片進行按比例壓縮
}
上面就是簡單的質量壓縮與尺寸壓縮。
E. 安卓用什麼軟體能把圖片縮小
美圖試試看 有這功能
F. android如何對viewpager裡面的圖片進行縮放
跟ViewPager沒有關系。對圖片的操作是ImageView,用Matrix來對圖片進行旋轉、縮放、平移等操作,查查Matrix和ImageView的相關內容。
G. android bitmap 圖片縮放問題
在使用Bitmap進行點陣圖讀取和顯示的時候需要注意在生成點陣圖時,系統會根據不同的情況來縮小、放大圖像。
當把圖片放到drawable文件夾中時,160密度的模擬器顯示的圖像有放大效果,240密度的模擬器顯示原尺寸的圖像。
當把圖片放到drawable-hdpi文件夾中時,160密度的模擬器顯示出的圖像有縮小效果,240密度的模擬器顯示原尺寸的圖像。
當把圖片放到drawable-mdpi文件夾中時,160密度的模擬器顯示原尺寸的圖像,240密度的模擬器顯示放大的圖像。
當把圖片放到drawable-ldpi文件夾中時,160、240密度的模擬器都顯示放大的圖片。
由此可以看出,在使用Bitmap顯示圖像時,一般應放在drawable-hdpi文件夾中,這樣可以根據屏幕的密度來調整圖像大小,比如再做游戲時,大屏幕的與小屏幕的手機中,人物或物體應該有大小之分。望求採納謝謝...
H. android等比例縮放圖片的方法
itmap icon = null;//原始圖片
int width = icon.getWidth(), height = icon.getHeight();
float scaleRate = 0.8f;//縮小的比例
while(width >= 300 || width >= 300) {
Matrix matrix = new Matrix();
matrix.postScale(width * scaleRate, height * scaleRate);
// 得到新的圖片
Bitmap newIcon = Bitmap.createBitmap(icon, 0, 0, width, height, matrix, true);
icon.recycle();
icon = newIcon;
width = icon.getWidth(), height = icon.getHeight();
}int width = icon.getWidth(), height = icon.getHeight();
if(width > 300 || width > 300) {
float scaleRate = width > height ? 300 / width : 300 / height;
Matrix matrix = new Matrix();
matrix.postScale(width * scaleRate, height * scaleRate);
// 得到新的圖片
Bitmap newIcon = Bitmap.createBitmap(icon, 0, 0, width, height, matrix, true);
icon.recycle();
icon = newIcon;
}
I. android gallery如何設置圖片按比例縮小
private
void
small()
{
int
bmpWidth=bmp.getWidth();
int
bmpHeight=bmp.getHeight();
Log.i(TAG,
"bmpWidth
=
"
+
bmpWidth
+
",
bmpHeight
=
"
+
bmpHeight);
/*
設置圖片縮小的比例
*/
double
scale=0.8;
/*
計算出這次要縮小的比例
*/
scaleWidth=(float)
(scaleWidth*scale);
scaleHeight=(float)
(scaleHeight*scale);
/*
產生reSize後的Bitmap對象
*/
Matrix
matrix
=
new
Matrix();
matrix.postScale(scaleWidth,
scaleHeight);
Bitmap
resizeBmp
=
Bitmap.createBitmap(bmp,0,0,bmpWidth,
bmpHeight,matrix,true)
J. android中有方法可以對圖片進行縮放嗎(不是縮放畫布,是真的改變了原來圖片的大小)
scaleType:CENTER /center 在視圖中心顯示圖片,並且不縮放圖片CENTER_CROP / centerCrop 按比例縮放圖片,使得圖片長 (寬)的大於等於視圖的相應維度CENTER_INSIDE / centerInside 按比例縮放圖片,使得圖片長 (寬)的小於等於視圖的相應維度FIT_CENTER / fitCenter 按比例縮放圖片到視圖的最小邊,居中顯示FIT_END / fitEnd 按比例縮放圖片到視圖的最小邊,顯示在視圖的下部分位置FIT_START / fitStart 把圖片按比例擴大/縮小到視圖的最小邊,顯示在視圖的上部分位置FIT_XY / fitXY 把圖片不按比例縮放到視圖的大小顯示MATRIX / matrix 用矩陣來繪制 到安卓巴士網站查看回答詳情>>