导航:首页 > 文件处理 > androidpng压缩

androidpng压缩

发布时间:2022-07-23 00:23:15

Ⅰ 什么是9png图片 原理是什么,9png工具又如何使用

9png图片它是android系统特有的一种图片格式,文件扩展名为.9.PNG。

9png的原理:其实相当于把一张png图分成了9个部分(九宫格),分别为4个角,4条边,以及一个中间区域,4个角是不做拉升的,所以还能一直保持圆角的清晰状态,而2条水平边和垂直边分别只做水平和垂直拉伸,所以不会出现边缘。

如何操作:鼠标左键选取需要拉伸的像素点;shift+鼠标左键取消当前像素点。

从图中可以看出,导入的png图片默认周围多了一像素点,也就是这一圈一像素点就是可操作区域。因为下方和右方可操作区域是指定内容的显示区域,属于可选区域,可不予理会;但是要注意内容区域的标记不能有间断,否则.9.png图片在放入项目下会报错。

注意上方和左边的黑色像素,是想让此png图像拉伸操作的时候,只是中间区域被拉伸。选择上方中间区域是为了横向拉伸的时候选取的拉伸像素点,左边则是纵向拉伸像素点。

在Android的设计过程中,为了适配不同的手机分辨率,图片大多需要拉伸或者压缩,这样就出现了可以任意调整大小的一种图片格式“.9.png”。

这种图片是用于Android开发的一种特殊的图片格式,它的好处在于可以用简单的方式把一张图片中哪些区域可以拉伸,哪些区域不可以拉伸设定好,同时可以把显示内容区域的位置标示清楚。

Ⅱ android开发 android drawable-hdpi文件的图片会放大也会缩小

hdpi的dp和像素比是1:1.5,就是说1个dp表示1.5像素,而1280-800的屏幕精细度是xhdpi,1dp表示2像素,这样就形成了一个3:4的比例
你看560/420 = 4/3 283/212 = 4/3
320*480的屏幕精细度是mdpi,dp和像素比是1,就是xhdpi的一半,所以图片的长宽像素都变成一半了,即560*283和280*141,就是这样子。

Ⅲ android系统上格式为RGBA8888的PNG图,载入后占用多少运存空间呢

PNG都是压缩图,读入内存的话,占用的与文件大小相同,应该不会展开成为位图,顶多是在绘制的时候又解压缩之类

理论上,不压缩的位图加上透明度,文件大小为
图片宽×图片高×(8+8+8+8)/ 8

以上是我认为的

Ⅳ android中该如何设置一张png图片的大小

android doc中是这样描述的:

public void setImageResource (int resId)
这是其中的一个方法,参数resld是这样:
ImageView.setImageResource(R.drawable.icon);

看下面这段话
Sets a drawable as the content of this ImageView.
This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup. If that's a concern, consider usingsetImageDrawable(Drawable) or setImageBitmap(Bitmap) and BitmapFactory instead.

此函数使用UI线程,可以用下面3种替代:
ImageView iv;

String fileName = "/data/data/com.test/aa.png;
Bitmap bm = BitmapFactory.decodeFile(fileName);
iv.setImageBitmap(bm);

ImageView iv = new ImageView(context);
iv.setImageResource(iv[position]);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(136,88));

mImageView = (ImageView)this.findViewById(R.id.myImageView1);
mImageView.setImageDrawable(getResources().getDrawable(R.drawable.right)

Ⅳ 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中压缩图片指定大小

注意看这句话,bit.compress(CompressFormat.PNG, 100, baos);
那里的数字表示 如果不压缩是100,表示压缩率为0。
如果是70,就表示压缩率是70,表示压缩30%;
所以你的倒数第二句话表示没有压缩。

以下是我压缩的方法,望采纳。

/**
* 图像压缩并保存到本地
* 返回处理过的图片
*
*/
private Bitmap
saveImage(String fileName,Bitmap bit) {

File file = new
File(fileName);
if (!file.exists()) {
try
{
file.createNewFile();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
ByteArrayOutputStream stream = new
ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, 70,
stream);
// 70 是压缩率,表示压缩30%; 如果不压缩是100,表示压缩率为0
FileOutputStream os =
new
FileOutputStream(file);
os.write(stream.toByteArray());
os.close();
return
bit;
} catch (Exception e) {
file = null;
return
null;
}
}

Ⅶ 请问大家有谁知道可以压缩图片(使图片占用内存变小)的安卓版免费的软件

网络流通的99.9%的图片都是高度压缩的png,jpg等格式,再次使用压缩软件压缩这类图片没有意义,缩小体积比率极小。安卓平台的压缩软件,很多主流手机品牌自带的文件管理器是集成了压缩解压功能的。将你打算压缩的一堆文件放进一个文件夹,选定这个文件夹,详情里就有压缩选项,如下图,如果手机品牌小众,没有自带的压缩解压工具,可以考虑PC平台知名软件的安卓版,比如rar for 安卓:

Ⅷ 安卓解压缩加密软件哪个好

360手机助手里直接搜索“安卓解压缩”软件,款可创建ZIP, RAR, 7Zip, BZip2压缩文件,可解压ZIP, JAR, APK, WAR, EAR, TAR, GZIP压缩文件的超强工具.软件功能:-支持内建程序管理及进程管理,可备份程序(非Private)到存储卡-支持可解压压缩大小64 kb, 1MB, 2MB, 3MB, 4MB, 6MB的7Z文件.甚至可以解压更大的7Z文件,但是过大的压缩文件可能导致程序意外终止甚至系统崩溃. 请创建7Z时注意大小.-支持可打开256-bit AES加密的ZIP.-支持可创建 ZIP, RAR, 7Zip, BZip2压缩文件,可解压ZIP, JAR, APK, WAR, EAR, TAR, GZIP压缩文件.-支持可以快速查看ZIP和RAR文件中的内容并可以选择文件解压.-支持菜单键可快速打开(like jpg, png, txt, xml, html...) , 管理文件/文件夹发送mail, 重命名, 移动, 复制, 删除-支持AES256加密方式加密解压缩ZIP文件(兼容WinZip)-支持APP2SD功能(支持安装到SD卡上)提醒:此软件似乎不支持中文文件解压和压缩.请大家尽量把文件夹和文件改成英文.

Ⅸ 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对原图片进行按比例压缩

}

上面就是简单的质量压缩与尺寸压缩。

Ⅹ android里面的图片资源怎么都是png的

因为png格式的文件支持透明度,android中可以存在四种png后缀的image文件
1.标准PNG: (ex.应用默认的icon.png)
符合PNG-8标准的PNG图片, 只能做图片, 不能放缩.
2.Android打包处理后的9.png: (ex.应用APK中打包的9.PNG)
为了保证占用空间小,android在资源中删除了标准PNG的大量冗余信息,去除了周边的空白像素,减少了IDAT数据段,
在打包成APK的时候,里面的文件就是不可放缩的9.png, 虽然后缀名还是9.png,但是已经没有放缩功能,并且把边界多的两个像素也去除了.
3.Android不可放缩的9.png:
在drawable中可以找到9.png图片,但是使用Draw 9-patch软件打开会报错,但是可以在drawable中使用,
这些文件只是删除了冗余信息,并且加上了边界的两个像素点,
并没有添加可放缩的flag到文件中,这些文件只能作为打包后的9.PNG使用(但是size会小一些),不能放缩和做背景.
4.Android可放缩的9.png:
可以使用Draw 9-patch软件打开,不会报错,在drawable中使用,android会根据设置的黑色像素点来进行放缩.
有添加可缩放的flag到文件中,可以做为View的背景或者普通的图片显示.在做背景时,可以进行拉伸和放缩.
在做非背景时,比如像ImageView这类设置src图片则不随view变化,按其自身大小显示部分或全部.

另: 对9.png后缀文件的解析逻辑及可放缩chunk检查的逻辑 Images.cpp
对9.PNG判断函数入口: Drawable.java中对”nine-patch”字段的判断

阅读全文

与androidpng压缩相关的资料

热点内容
京东java算法笔试题 浏览:174
柱子加密箍筋不准有接头 浏览:197
我的世界服务器菜单插件如何使用 浏览:12
刘毅10000词pdf 浏览:890
刚毕业的程序员会什么 浏览:974
单片机控制64路开关量 浏览:982
win10截图编程 浏览:420
怎样把名字变成文件夹 浏览:203
文件怎么搞成文件夹 浏览:730
多线程编程php 浏览:606
安卓机越用越卡有什么办法 浏览:17
高中生解压操场适合做的游戏 浏览:395
程序员java招聘 浏览:462
未来之光手机云服务器 浏览:160
服务器下载资料为什么c盘满了 浏览:265
怎么清除空文件夹 浏览:544
如何查看派派服务器 浏览:804
杀手6解压画面 浏览:671
夸张程序员 浏览:469
如何直播切两个APP画面 浏览:786