Android 图片资源

1.常用图片资源

格式透明度体积场景
png支持较大支持透明度的普通图片
jpg不支持较小不支持透明度的背景图
webp支持除了启动图标和通知图标的其他png适应场景
svg支持小图标
gif支持loading 动画
.9.png支持较大聊天气泡
json支持(lottie动画)复杂的动画场景

2.png

png 的图片一般支持透明度,体积会较大
可以使用第三方的软件对体积进行压缩处理
或者替换成 webp 的格式
手机设备会对 png 的图片进行硬件加速,加载速度较快

3.jpg

由于 jpg 不支持透明度,适合作为背景,体积会相对于PNG减小,因为少了2位透明度的体积。

4.webp

官方建议压缩比例75%,不放心可以100%的无损压缩
适用于 png 的大多数场景可以转成 webp 的格式

4.1 兼容性问题

4.2版本以上才支持,目前最低版本都是 5.0,所以不用考虑

4.2 png 转 webp

在 AS 鼠标右键点击 png 图片,选中 Convert to WebP…

5.svg

适合小图标,比如返回,设置等icon
太复杂的图,不建议使用svg,在部分低性能的设备上,会加载很慢
注意兼容性问题,有些 api 只支持高版本

Attribute 'endX' is only used in API level 24 and higher (current min is 21)

注意路径(android:pathData)不能过长,会影响加载效率

Very long vector path (806 characters), which is bad for performance.
Considering reducing precision, removing minor details or rasterizing vector.

遇到这种情况可以用webp代替,或者降低svg的复杂度

6.gif

适合 loading 场景 和 评论聊天等场景
可以用 Glide 进行加载展示
如果是项目内置的 loading 场景,建议使用 lottie 动画代替

7…9.png

点九图,目前使用比较少了

8. json

复杂动画推荐使用

总结

小图标 建议使用 svg
一般图片建议使用 webp
无透明度图片 建议使用 jpg
复杂动画 建议使用 json

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在Android中实现图片资源加密解密,我们可以使用以下步骤: 1. 将图片转换为字节数组 2. 使用加密算法(如AES)对字节数组进行加密 3. 将加密后的字节数组保存到文件中,以自定义格式作为文件扩展名(如“.enc”) 4. 在应用程序中使用Glide加载图片时,使用自定义的解密器将加密的图片解密为原始字节数组 5. 将解密后的字节数组作为参数传递给Glide加载图片 以下是一个简单的示例代码,演示了如何使用AES加密和解密图片资源: 加密代码: ```java public static void encryptImage(Context context, int resourceId, String outputPath) throws Exception { InputStream inputStream = context.getResources().openRawResource(resourceId); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } byte[] data = outputStream.toByteArray(); outputStream.close(); inputStream.close(); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec("my-secret-key-123".getBytes(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec("my-iv-parameter-456".getBytes()); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] encryptedData = cipher.doFinal(data); FileOutputStream fileOutputStream = new FileOutputStream(outputPath); fileOutputStream.write(encryptedData); fileOutputStream.close(); } ``` 解密代码: ```java public static byte[] decryptImage(Context context, Uri uri) throws Exception { InputStream inputStream = context.getContentResolver().openInputStream(uri); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } byte[] encryptedData = outputStream.toByteArray(); outputStream.close(); inputStream.close(); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec("my-secret-key-123".getBytes(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec("my-iv-parameter-456".getBytes()); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); byte[] data = cipher.doFinal(encryptedData); return data; } ``` 在应用程序中使用Glide加载解密后的图片: ```java Glide.with(context) .load(Uri.parse("file:///android_asset/image.enc")) .asBitmap() .format(new CustomImageFormat()) .decoder(new CustomImageDecoder()) .into(imageView); ``` 其中,CustomImageFormat用于指定自定义图片格式的文件扩展名(如“.enc”),CustomImageDecoder用于实现自定义的解密器,将加密的图片资源解密为原始字节数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值