首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

检查用于创建位图的图像是否为.PNG的最有效方法- Android

检查用于创建位图的图像是否为.PNG的最有效方法是通过检查图像文件的文件头来确定其文件类型。在Android开发中,可以使用以下代码来实现:

代码语言:txt
复制
public boolean isPngImage(File imageFile) {
    try {
        FileInputStream fis = new FileInputStream(imageFile);
        byte[] header = new byte[8];
        fis.read(header, 0, 8);
        fis.close();

        // PNG文件的文件头标识为89 50 4E 47 0D 0A 1A 0A
        byte[] pngHeader = new byte[]{(byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};

        for (int i = 0; i < 8; i++) {
            if (header[i] != pngHeader[i]) {
                return false;
            }
        }

        return true;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

该方法首先打开图像文件,读取文件头的前8个字节。然后,将读取的文件头与PNG文件的文件头进行比较,如果完全匹配,则说明图像文件是PNG格式的。

这种方法的优势是简单高效,只需要读取文件头的几个字节即可确定文件类型。它适用于Android应用中需要检查图像文件类型的场景,例如在加载图像前进行类型检查,以确保只加载PNG格式的图像。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云的相关产品示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 内存优化】图片文件压缩 ( Android 原生 API 提供图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

public boolean compress(CompressFormat format, int quality, OutputStream stream) { // 首先检查该图片是否被回收..., 显示检查该流是否合法 if (stream == null) { throw new NullPointerException(); }...原生 API 提供尺寸压缩 ---- 图片尺寸压缩函数原型 : 下面的函数原型中给出了详细注释 ; ① 函数作用 : 创建一个新 Bitmap 对象 , 缩放一张已存在位图 ; 如果指定宽高与当前源位图宽高一致...位图 , 如果缩放失败 , 返回源图 ; /** * 创建一个新 Bitmap 对象 , 缩放一张已存在位图 ; * 如果指定宽高与当前源位图宽高一致 , 那么直接将源位图返回...* @param filter 设置缩放图像是否使用双线性滤波

4.3K20

Bitmap图片压缩,大图加载防止OOM

读取位图尺寸和类型 BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 解码方法(decodeByteArray()、decodeFile()、decodeResource()等...根据您图片数据源选择最合适解码方法。这些方法尝试构造位图分配内存,因此很容易导致 OutOfMemory 异常。...java.lang.OutOfMemory 异常,请先检查位图尺寸,然后再对其进行解码,除非您绝对信任该来源可为您提供大小可预测图片数据,以轻松适应可用内存。...[format,png#pic_center] 例如,如果您有一个可绘制位图资源,它在中密度屏幕上大小 48x48 像素,那么它在其他各种密度屏幕上大小应该为: 36x36 (0.75x) -...当原始图像很大且只需要部分图像时,BitmapRegionDecoder 尤其有用。 要创建 BitmapRegionDecoder,请调用 newInstance() 。

2.7K00
  • Bitmap图片压缩,大图加载防止OOM

    在这里插入图片描述 前言 Android官网中处理位图 和 高效加载大型位图 这两篇文章中已经做了很明确指出了如何高效加载大图。...读取位图尺寸和类型 BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 解码方法(decodeByteArray()、decodeFile()、decodeResource()等...根据您图片数据源选择最合适解码方法。这些方法尝试构造位图分配内存,因此很容易导致 OutOfMemory 异常。...java.lang.OutOfMemory 异常,请先检查位图尺寸,然后再对其进行解码,除非您绝对信任该来源可为您提供大小可预测图片数据,以轻松适应可用内存。...当原始图像很大且只需要部分图像时,BitmapRegionDecoder 尤其有用。 要创建 BitmapRegionDecoder,请调用 newInstance() 。

    1.9K20

    了解 Android 矢量图片格式:`VectorDrawable`

    位图 vs 矢量图 大多数图像格式(png、jpeg、bmp、gif 和 webp 等等)都是位图格式,这意味着它们将图像绘制为一个固定像素网格。...放大位图(左)与放大矢量图(右) 这就是为什么在 Android 上我们需要为不同密度屏幕提供多个版本位图资源: res/drawable-mdpi/foo.png res/drawable-hdpi...VectorDrawable 通常会更小,并且无需创建更大位图资源。...动态 由于矢量图像描述它们内容并不是将自己”扁平化“像素,这动画、交互或动态主题等有趣新可能打开了新大门。将来会写更多关于这方面的文章。 ?...由于格式性质,矢量在在描述一些矢量资源(如简单图标等)时 非常有用。它们在编码摄影类型图像时非常糟糕,因为这种图像内容很难被描述一系列形状组合。位图格式(如 webp)此时会更有效率。

    2.5K30

    Android训练课程(Android Training) - 高效显示图片

    ,以从不同数据源创建位图对象。基于你图像数据源来选择合适解码方法。这些方法作用是结构化位图分配内存,因此很容易返回OutOfMemory 异常。...读取缩放后图像到内存 现在我们知道了图像尺寸,他们可被用于决定是否使用完整图像加载到内存或者采用缩略图加载到内存。...cancelPotentialWork 方法检查是否有其他任务管理到这个ImageView。...onPostExecute()方法更新操作,它检查了 任务是否被终止过了和 当前任务是否是 ImageView关联任务。...在运行应用,解码方法要去检查 是否已经有可重用位图,比如: public static Bitmap decodeSampledBitmapFromFile(String filename,

    2.9K00

    创建支持多种屏幕尺寸Android应用

    * 不同屏幕密度提供不同位图绘图* 默认情况下,Android调整你位图绘图(.png, .jpg, and .gif 文件)和9补丁绘图(.9.png 文件),让他们在每个设备上以适当物理尺寸呈现...简单地创建两个不同尺寸图标(例如100x100用于中等密度,150x150用于高密度),把这两个变体放在适当目录,使用适当限定符: res/drawable-mdpi/icon.png //适合于中等密度屏幕...调整运行时创建位图对象 如果应用程序创建一个内存中位图位图对象),系统认为这个位图基线中等密度屏幕设计,默认情况下,在绘制时自动调整位图。...如果正在创建一个使用BitmapFactory(如从文件或者流)位图,可以使用BitmapFactory。选择定义一个已经存在位图特性,这决定系统是否或如何调整位图。...例如,可以使用Density来定义位图哪种密度设计,用Scaled去指定位图是否应该调整到匹配当前设备屏幕密度。

    2.6K60

    Kotlin入门(27)文件读写操作

    另外像图片等二进制格式文件,可通过字节数组形式写入文件,Kotlin提供了writeBytes方法用于覆盖写入字节数组,也提供了appendBytes方法用于追加字节数组。...= file.outputStream()             //压缩格式JPEG图像,压缩质量80%             bitmap.compress(Bitmap.CompressFormat.JPEG...该办法确实可行,因为Android位图工厂BitmapFactory刚好提供了decodeByteArray函数,用于从字节数组中解析位图,具体代码如下所示:     //方式一:利用字节数组读取位图...文件树使用很简单,首先调用File对象walk方法得到FileTreeWalk实例,接着依次该实例设置具体条件,包括遍历深度、是否匹配文件夹、文件扩展名,以及最后文件队列循环处理。...譬如图片文件扩展名既可能是png,也可能是jpg,此时若用传统或语句判断固然可行,但并不雅观,更好办法是利用Kotlinin条件,即判断文件扩展名是否位于扩展名队列中,形如“it.extension

    3.3K20

    聊聊有关SVG那些事儿

    微信文章阅读后感 首先,微信提出了几个论点: “清晰”和“体积”矛盾与麻烦 面对android各种dpi某事,想要所有设备上图片都能有清晰效果,就意味着每种dpi模式都必须提供一份对应尺寸资源...Picture并不支持硬件加速,因此必须要将ViewLayerType设为Software,而这个操作意义就是View创建了一个Bitmap将Picture绘制其上,同时缓存起来。...而关于详细,请查阅:W3School官方 首先要解释下矢量图像以及位图图像? 矢量图象 SVG是W3C 推出一种开放标准文本式矢量图形描述语言,他是基于XML、专门网络而设计图像格式。...位图图像 位图图像(Bitmap)存储单位是图像上每一点像素值,因而文件会比较大,像GIF、JPEG、PNG等都是位图图像格式。...而这里需要注明一点: ❈ Vector图像刚发布时候,是只支持Android 5.0+,自从AppCompat 23.2之后,Vector可以使用于Android 2.1以上所有系统,只需要引用

    1.3K40

    Android开发笔记(七十七)图片缓存算法

    内存缓存数据结构可使用映射表HashMap,通过唯一uri来定位图像Bitmap对象;排队算法一般采用先进先出FIFO策略,考虑到FIFO需要对队列两端做操作,从队列顶端移除溢出图像,把新增图像加到队列末端...映射表和双端队列介绍参见《Android开发笔记(二十六)Java容器类》,另外,防止并发操作双端队列,引起不必要资源冲突,在声明相关方法时要加上synchronized关键字。...磁盘操作分两块,一块是创建图片文件缓存目录,首先检查缓存目录是否存在,不存在则先创建目录;其次根据哈希值检查图片文件是否存在,存在则读取图像,不存在则跳到网络处理;目录与文件介绍参见《Android...另外,提高用户体验,经常在图片加载之前,就在原图位置先放一张占位图片;如果图片加载失败,也在原图位置提示错误图片或者默认图片;这些占位图片和错误图片可在配置缓存信息时进行设置。...上线时需要去掉该方法 .build(); //开始构建配置 DisplayImageOptions 显示信息主要指定显示模式与占位图片,可用于ImageLoaderdisplayImage

    1.1K70

    TRTC案例:截图体积与清晰度

    Android例,可以在setVideoEncoderParam是传入TRTCVideoEncParam中,指定videoResolution。...PNG(Portable Network Graphics)可移植网络图形格式,也是一种位图文件存储格式,可以进行无损压缩, PNG格式因其支持透明属性是网页中广泛使用一种格式。...由于PNG是无损,保存将要被编辑图像来说更加合适。 JPEG(Joint Photographic Experts Group,联合图像专家小组)是一种针对照片影像而广泛使用有损压缩标准方法。...GIF JPEG PNG8 PNG24 PNG32 创建年份 87年 92年 96年 96年 96年 是否有损压缩 无损 有损 无损 无损 无损 支持颜色数 256(8bit) 1670W(24bit)...(无限提高码率是不对,一般分辨率和码率都是有对应档次关系,后续文章展开讲解) 那么,如果业务侧想要获取高质量截图,最有效方法是什么呢,是在推流端本地获取。

    2.6K10

    你重新系统梳理下, Web 体验优化中和图有关那些事(万字长文)

    位图就是由象素阵列排列来实现其显示效果,每个象素有自己颜色信息,在对位图图像进行编辑操作时候,可操作对象是每个象素,我们可以改变图像色相、饱和度、明度,从而改变图像显示效果。...位图根据位深度,有 1、4、8、16、24、32 位图像等。位图放大会失真变模糊。 矢量图:计算机图形学中用点、直线或者多边形等基于数学方程几何图元表示图像。...普遍被使用扩展名格式 .jpg,其他常用扩展名还包括 .jpeg、.jpe、.jfif 以及 .jif。...其特点是有损压缩,直接色,位图,体积最小,常用于颜色较丰富、无透明要求图片。 PNGPNG 是一种无损压缩位图图形格式,支持索引、灰度、RGB 三种颜色方案以及 Alpha 通道等特性。...GIF:图像互换格式(Graphics Interchange Format)是一种位图图形文件格式,无损压缩、索引色。原始版本 87a,1989 年发布 89a 版本,支持多帧动画和透明色。

    1.3K20

    Android教程-保存数据-支持不同屏幕

    3.2 及其以上版本支持许多可以让你用一种与像素密度无关方式基于最小宽度和高度屏幕尺寸来指定高级方法....更多信息,见 设计用于多种屏幕 . 创建不同位图  ---- 你应该针对一般项目密度类型提供位图资源恰当缩放版本: 低, 中, 高 和 超高项目密度 ....为了生成这些图像,你应该从矢量格式源生资源开始,使用如下尺寸范围每一种项目密度生成图像 : xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (基线) ldpi: 0.75...drawable-ldpi/ awesomeimage.png 任何时间你引用 @drawable/awesomeimage, 系统都会基于屏幕像素密度选择对应位图 ....更多有关应用创建图标资源提示和指南,见 图标设计指南.

    63320

    CImage 类

    CImage::GetWidth 检索当前图像宽度(以像素单位)。 CImage::IsDIBSection 确定附加位图是否 DIB 部分。...注解 TRUE仅当位图为8位 (256 颜色) 或更低时,此方法才会返回。 备注 此方法仅支持 DIB 节位图。 CImage::IsNull 确定当前是否已加载位图。...有效图像类型 BMP、GIF、JPEG、PNG 和 TIFF。 CImage::LoadFromResource 从资源加载 BITMAP 图像。...yMask 参数指定掩码位图垂直像素 hbmMask 偏移量。 dwROP 指定前景色和背景三元色栅运算代码,该方法用于控制源数据和目标数据组合。...注解 如果 hbmMask 标识有效单色位图,则使用此位图来屏蔽源 PlgBit 矩形中颜色数据位。 此方法仅适用于 Windows NT 4.0 及更高版本。

    3.3K40

    android学习笔记----关于图形基本处理讲解

    一定记住解码图片时第二个参数BitmapFactory.Options,控制下采样和图像是否应该被完全解码选项,或者只是返回大小。...public int inSampleSize         如果设置> 1值,请求解码器对原始图像进行二次采样,返回较小图像以节省内存。...参数 bitmap Bitmap:要绘制位图 这个值绝不能是null. matrix Matrix:用于在绘制位图时转换位图矩阵。 这个值绝不能是null. paint Paint:可能为空。...用于绘制位图油漆 activity_main.xml <?xml version="1.0" encoding="utf-8"?...图像压缩格式有JPEG、PNG、WEBP 撕衣服小案例: 真机测试(华为荣耀V9,8.0.0系统)运行效果图: Mainctivity.java import android.graphics.Bitmap

    62920

    Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库解码 WebP 图片 )

    中解码相关方法如下 : libwebpJNI 是 Java 层调用 libwebp.so 动态库入口类 ; public static byte[] WebPDecodeRGB(byte...WebPDecodeARGB 方法 , 传入 4 个参数作用 : byte[] var0 : ARGB 字节数据 ; int var1 : ARGB 字节数据字节个数 ; int[] var3...: 图像宽度 , 传入是数组 , 只有 1 个元素 , 作为返回值使用 ; int[] var4 : 图像高度 , 传入是数组 , 只有 1 个元素 , 作为返回值使用 ; public static...Bitmap.Config.ARGB_8888 // 图像颜色格式 ) // 界面显示解码后位图 binding.imageView.setImageBitmap...高于 Android 本身自带 API 速度 ; 界面显示 : 三、参考资料 ---- 参考文档 : 创建 WebP 图片 : https://developer.android.google.cn

    1.8K10

    android:绘图 (android.graphics包)

    其中第一个压缩格式目前有JPG和PNG void copyPixelsFromBuffer(Buffer src) 从一个Buffer缓冲区复制位图像素 void copyPixelsToBuffer(...Buffer dst) 将当前位图像素内容复制到一个Buffer缓冲区 我们看到创建位图对象createBitmap包含了6种方法在目前Android 2.1 SDK中,当然他们使用是API Level...有关Android平台上表示颜色方法有很多种,Color提供了常规主要颜色定义比如Color.BLACK和Color.GREEN等等,我们平时创建时主要使用以下静态方法 static int argb...由于该类提供了高质量支持透明缩放方式,所以图形格式PNG,文件命名方式.9.png 后缀比如android123.9.png。...final boolean isBold() final boolean isItalic() 该类创建方法还有从apk资源或从一个具体文件路径,其具体方法 static Typeface createFromAsset

    63820

    为何大厂图片不会OOM?

    意为Android10之后如果quality值(压缩质量)100的话,bitmap压缩采用无损压缩格式,其他都为有损压缩; 这里有的同志会问,这都是压缩格式啊,具体怎么操作压缩呢,Bitmap我们提供了一个可靠方法供开发者使用...; Config 表示位图像存储格式,什么意思呢?...,也是占空间一种配置; Bitmap.Config.RGB_565:颜色信息由R(Red),G(Green),B(Blue)三部分组成,R占5位,G占6位,B占5位,总共占16位; 上面说了 android...; BitmapFactory 创建位图bitmap对象途径有很多种, 包括指定文件、流, 和字节数组等; ?...:是否图片内容可变,如果Bitmap复用的话,需要设置true; inDensity :加载bitmap时候对应像素密度(后面会讲到); inTargetDensity :bitmap位图被真实渲染出像素密度

    1.1K20
    领券