当前位置:首页 » 安卓系统 » android保存图片格式

android保存图片格式

发布时间: 2022-08-17 03:58:16

1. 安卓手机如何保存照片格式化

你问的是安卓手机如何将保存的照片格式化吗?打开手机系统设置,找到备份和重置,先将重要数据备份,然后点击恢复出厂设置,选择格式化,就能格式化手机里面所有的数据包括照片了。
格式化是指对磁盘或磁盘中的分区进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除,所以进行格式化前,先确定磁盘中的数据是否还有需要,提前备份。格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。

2. android版的qq浏览器另存图片为什么是bmp格式

BMP是最低级的格式。是占用内存最小的。QQ一般就是用的bmp。如果你想改的话也只能保存了在电脑上操作了。

3. 安卓手机闪照怎么保存

1.首先,你要做的就是查看并记住闪照的发送的时间。
2.打开文件夹:/tencent/MobileQQ/diskcache。
我们查看的闪照就保存在这个文件夹里边。
3.把文件夹的文件排序改为“修改时间”。
因为这个文件夹有很多个文件,如果不按照时间排序,我们是很难找到闪照图片的!
4.找到并打开修改时间和闪照发送时间一致的文件。
5.找到闪照文件,点击,然后用系统自带相册打开便可以看到闪照了。这样打开后的图片是经过压缩的,画质大大缩小。

4. Android 保存图片到本地。

这里只介绍按下“保存”后如何将一个Bitmap对象保存为图片文件的执行步骤,对图片的下载,图片到Bitmap对象的转换,Bitmap对象的格式转换和压缩,以及界面设计部分全部都忽略了。

  • 确定存储路径

  • 获取外部存储权限

  • 确定外部存储状态

  • 确定文件名

  • 保存到文件中

  • 发送广播,通知系统扫描保存后的文件

  • 确定存储路径

    在Android中文件存储路径包括内部存储和外部存储两种类型。

    对内部存储,当一个app被安装到手机后,Android系统会在内部存储的/data/data/目录下创建一个以包名称命名的文件夹。例如/data/data/com.sohu.inputmethod.sogou/。一个应用对内部存储的所有访问都被限制在这个文件夹中,也就是说Android应用只能在该目录中读取,创建,修改文件。对该目录之外的其他内部存储中的目录都没有任何操作的权限。因此,如果将图片保存在内部存储中,只能被应用自身读取,其他应用均无法读取。如果需要让系统图库,相册或其他应用能够找到保存的图片,必须将图片保存到外部存储中。

    对外部存储,当一个app被安装到手机后,Android系统会在外部存储的/Android/data/目录下创建一个以包名命名的文件夹(这里第一个/不是根路径,而是相对外部存储所挂载路径的相对路径)。例如/storage/emulated/0/Android/data/com.sohu.inputmethod/。这个路径同样只能被应用自身读取,其他应用不能访问。因此,也不能将图片保存在这个目录中。

    除外部存储的/Android目录之外的其他目录一般都是可以被其他应用访问的。目前,大多数应用都会在外部存储的根路径下建立一个类似包名的多层目录,以存储需要共享的文件。例如/storage/emulated/0/sogou/image/。还需要注意的是,很多查看图片的应用都支持按照文件夹来查看图片。如果将图片所在的文件夹取名为image,photo之类的,就无法和其他文件夹区分开,用户也不能识别该文件夹的用途。因此最好取一个有区分度的文件夹名字,例如网络贴吧就保存在/tieba目录,微信是保存在/tencent/MicroMsg/WeiXin目录。

    由于Android系统的碎片化问题,不同设备上外部存储的路径很可能会不同,因此,不能直接使用/storage/emulated/0/作为外部存储的根路径。
    Android SDK中 Environment类 提供了getExternalStorageDirectory()方法来获取外部存储的根路径。示例如下:

    [java]view plain

  • Stringdir=Environment.getExternalStorageDirectory().getAbsolutePath()+"/tencent/MicroMsg/WeiXin/"

  • 需要注意的是Environment.getExternalStorageDirectory()返回的路径中最后一个字符不是/,如果需要创建子目录,需要在子目录的前后都加上/。

    获取外部存储权限

    由于需要在外部存储中写文件,需要在AndroidManifest.xml中增加如下的权限声明。

    [java]view plain

  • <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  • 确定外部存储状态

    由于外部存储需要被挂载,也可以被卸载,在写入文件之前,需要先判断外部存储的状态是否正常。只有状态正常情况下才可以执行保存文件的操作。获取外部存储状态同样是通过Environment类,通过Environment.getExternalStorageState()可以得到一个字符串,来表示外部存储的状态。同时在Environment类中定义了一系列的String常量表示不同的状态。在所有的状态中只有内部存储处于Environment.MEDIA_MOUNTED状态时才可以读写文件,因此,需要将获取到的状态和Environment.MEDIA_MOUNTED做比较,如果不是Environment.MEDIA_MOUNTED状态,就返回保存失败。示例如下。

    [java]view plain

  • //获取内部存储状态

  • Stringstate=Environment.getExternalStorageState();

  • //如果状态不是mounted,无法读写

  • if(!state.equals(Environment.MEDIA_MOUNTED)){

  • return;

  • }



  • 确定文件名

    保存的图片文件名可以由应用根据自身需要自行确定,一般来说需要有一个命名规则,然后根据命名规则计算得到文件名。
    这里列举几种常见的命名规则。

  • 随机命名
    这种命名规则是随机生成一个字符串或一组数字来对图片命名。
    字符串可以通过UUID来生成,数字可以通过Random()类来生成,例如:

    [java]view plain

  • //通过UUID生成字符串文件名

  • StringfileName1=UUID.randomUUID().toString();

  • //通过Random()类生成数组命名

  • Randomrandom=newRandom();

  • StringfileName2=String.valueOf(random.nextInt(Integer.MAX_VALUE));

  • 这种命名规则是按照数字从小到大的顺序来对图片命名。
    在程序启动时先获取图片文件名中当前最大数字的文件名,之后每保存一张图片就将数字加1即可。

  • 时间命名
    这种命名规则是根据保存图片的当前系统时间来对图片命名。
    系统时间可以通过System.currentTimeMillis()来获取,不过System.currentTimeMillis()获取到的时间是一个long型的整数,如果用它做文件名,无法通过文件名直接看出文件的具体保存时间。可以通过SimpleDateFormat先对当前时间做格式化,然后再将其作为文件名来使用。例如:

    [java]view plain

    使用这种命名规则来命名需要注意的是同一秒钟可能会有多张图片需要保存,在得到当前系统时间对应的文件名后,需要判断该文件是否存在。如果文件已经存在,需要重新生成文件名。重新生成的文件名可以在之前的文件名后加上一个随机数后缀,或者是用毫秒数做后缀。

  • Calendarnow=newGregorianCalendar();

  • SimpleDateFormatsimpleDate=newSimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault());

  • StringfileName=simpleDate.format(now.getTime());

  • 文件URL命名
    每张网络图片都有一个对应的图片URL,可以根据图片的URL来对图片命名。
    不过URL中会包含一些不能用作文件名的特殊字符,此外直接用URL来命名可能会带来安全问题。为了避免这两个问题,可以将图片URL的MD5值作为文件名来使用。由于MD5是不可逆的,也就无法通过MD5值反向得到图片URL,同时MD5值对应的字符串只包含[0-9A-Z],不包含特殊字符,可是作为文件名使用。
    由于每张图片的URL是唯一的,其对应的文件名也就是唯一的。如果需要每张网络图片只能生成一个文件,不允许保存为多份拷贝,可以用这种命名规则。在得到URL对应的文件名后,先判断文件是否已经存在,如果已经存在,直接覆盖或不处理。

  • 保存到文件中

    保存图片文件时,通过Bitmap的compress()方法将Bitmap对象压缩到一个文件输出流中,然后flush()即可。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 发送广播,通知系统扫描保存后的文件

    至此,已经实现将Bitmap对象保存成外部存储中的一个jpg格式的文件。但此时该文件只是保存在外部存储的一个目录中,必须进入其所在的目录中才可以看到。在系统图库,相册和其他应用中无法看到新建的图片文件。为了让其他应用能够知道图片文件被创建,必须通知MediaProvider服务将新建的文件添加到图片数据库中。

    Android系统中常驻一个MediaProvider服务,对应的进程名为android.process.media,此服务用来管理本机上的媒体文件,提供媒体管理服务。在系统开机或者收到外部存储的挂载消息后,MediaProvider会调用MediaScanner,MediaScanner会扫描外部存储中的所有文件,根据文件类型的后缀将文件信息保存到对应的数据库中,供其他APP使用。

    MediaScannerReceiver是一个广播接收者,当它接收到特定的广播请求后,就会去扫描指定的文件,并根据文件信息将其添加到数据库中。当图片文件被创建后,就可以发送广播给MediaScannerReceiver,通知其扫描新建的图片文件。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • //保存图片后发送广播通知更新数据库

  • Uriuri=Uri.fromFile(file);

  • sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 图片的异步保存

    保存图片文件时,如果图片很大,或需要同时保存多张图片时,就需要较多的时间。为了避免阻塞UI线程,出现帧率下降或ANR,通常需要将图片保存操作放到线程中去执行。当图片保存完毕后通过sendMessage()方法通知UI线程保存结果。
    将图片保存放到后台线程去执行需要增加一些同步机制避免一些多线程问题。例如有两张图片需要保存,分别放到两个线程中去执行,保存图片时文件名以数字顺序增加。第一个线程选中文件名为125.jpg,但此时文件还未创建,第二个线程判断125.jpg不存在,于是也选取125.jpg作为文件名,两张图片就保存到同一个文件中了。

5. android 如何获取保存的图片的地址 并存到数据库中

安卓中如何获取保存的图片uri 并保存到sqlite数据库中
有如下两种方法,仅供参考
方法一:Java代码

public void saveIcon(Bitmap icon) {
if (icon == null) {
return;
}
// 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的
// BLOB类型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
icon.compress(Bitmap.CompressFormat.PNG, 100, os);
// 构造SQLite的Content对象,这里也可以使用
raw ContentValues values = new ContentValues();
// 写入数据库的
Browser.BookmarkColumns.TOUCH_ICON字段 values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray());
DBUtil.update(....);
//调用更新或者插入到数据库的方法
}
}

方法二:如果数据表入口时一个content:URIJava代码

import android.provider.MediaStore.Images.Media;
import android.content.ContentValues;
import java.io.OutputStream;
// Save the name and description of an image in a ContentValues map.
ContentValues values = new ContentValues(3);
values.put(Media.DISPLAY_NAME, "road_trip_1");
values.put(Media.DESCRIPTION, "Day 1, trip to Los Angeles");
values.put(Media.MIME_TYPE, "image/jpeg");
// Add a new record without the bitmap, but with the values just set.
// insert() returns the URI of the new record.
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
// Now get a handle to the file for that record, and save the data into it.
// Here, sourceBitmap is a Bitmap object representing the file to save to the database.
try {
OutputStream outStream = getContentResolver().openOutputStream(uri);
sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream);
outStream.close();
} catch (Exception e) {
Log.e(TAG, "exception while writing image", e);
}
原文请看http://www.bafenbaosoft.com/post/48.html

6. iPhone 和 android 把图片读在内存里是以什么格式存放的

你好,是JPG格式的文件

7. android数据库储存图片问题。

存储图片是在SdCard下的,不要放在数据库里面。否则用户在设置里找到你的应用--》"清除数据"你的图片岂不是全部丢掉了.
所以开发时图片一般在内存中或者在Sdcard中

无论图片在哪都可以让适配器去连接你的图片与UI显示的。要理解 View -Adapter -source 三者之间的关系对你有莫大的好处.
仅仅伸手要代码,无任何好处,下次你还不会懂

8. Android对图片格式有什么建议么,PNG还是JPEG

其实png和jpeg都可以,image载入以后,在内存里面是一样的.但是png的压缩算法解压快很多,jpeg的话可以有很高的压缩比(当然会有损失) 所以,你可以自己来平衡文件大小,图片质量和解压代价之间的关系

9. 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”字段的判断

10. android 已经使用 byte []data=readInputStream(input);接下来该如何保存读取的图片呢

File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int count = 0;// 循环写出
while ((count = in.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();// 关闭流
input.close();

热点内容
编程好软件 发布:2025-01-16 20:38:07 浏览:423
流量密码如何改成 发布:2025-01-16 20:37:13 浏览:50
java判断是否是对象 发布:2025-01-16 20:31:04 浏览:885
python调用外部程序 发布:2025-01-16 20:14:09 浏览:397
缓解压力英语作文 发布:2025-01-16 20:13:31 浏览:65
javaname 发布:2025-01-16 20:13:15 浏览:22
用户访问表空间 发布:2025-01-16 20:07:07 浏览:944
java代码自动编译 发布:2025-01-16 19:58:14 浏览:314
编程很困难 发布:2025-01-16 19:58:09 浏览:674
gg登录源码 发布:2025-01-16 19:58:07 浏览:293