Thumbnails

本文分享了使用net.coobird.thumbnailator.Thumbnails处理图片时的心得体会,包括等比例缩放、加水印、旋转等功能的优点,以及其在处理压缩png图片质量和内存消耗方面的不足。作者在遇到内存溢出问题后,决定转向使用原生的imageIO进行图片处理,并最终改用nginx处理图片,以提高效率和稳定性。
net.coobird.thumbnailator.Thumbnails;
针对次此图片处理开源功能几点心得:
处理图片相对较好:等比例缩放,加水印,旋转等。

Thumbnails给我的感觉就是比较耗内存。
还有就是Thumbnails在处理压缩png图片质量时无效,这个有待优化

jvm设置到1200MB都能造成内存溢出,所以当时我放弃使用它,沿用原生的图片
处理imageIO

Thumbnails当指定输出格式为png时,内存消耗特别严重,原图片1M能处理到5M输出到客户端
Thumbnails中还有些许bug,希望在下一个版本来说能更好

现在改用nginx处理图片了

### 关于管理或自定义 Android Studio 中的 Thumbnails 在 Android 开发中,`ImageView` 是用于显示图像的主要组件之一。通过 `android:scaleType` 属性可以控制图片如何适应 `ImageView` 的边界[^1]。然而,当涉及到缩略图(thumbnails)的功能时,通常会涉及以下几个方面: #### 1. 使用 Glide 或 Picasso 加载和处理缩略图 Glide 和 Picasso 是两个流行的第三方库,专门用于加载和缓存图像资源。它们提供了简单的方法来生成和展示缩略图。 以下是使用 Glide 来加载并生成缩略图的一个例子: ```java import com.bumptech.glide.Glide; Glide.with(context) .load(imageUrl) // 图片 URL 地址 .thumbnail(0.1f) // 设置缩略图为原图大小的 10% .into(imageView); // 将结果放入 ImageView ``` 上述代码中的 `.thumbnail(0.1f)` 方法表示先加载一个较小版本的图像作为占位符,直到完整的图像被加载完成为止[^3]。 --- #### 2. 自定义 Thumbnail 大小与裁剪方式 如果希望手动调整缩略图的行为,则可以通过设置 `ImageView` 的属性实现特定效果。例如,“centerCrop” 可以让图片按比例填充整个视图区域,而 “centerInside” 则保持原始宽高比并将图片完全包含在视图范围内。 下面是一个 XML 配置的例子: ```xml <ImageView android:id="@+id/image_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerCrop" /> ``` 这里设置了 `android:scaleType="centerCrop"`,这使得任何超出 `ImageView` 边界的多余部分都会被裁切掉,从而确保图片始终填满控件范围。 --- #### 3. 在 MediaStore API 中获取媒体文件的缩略图 对于本地存储的照片或其他多媒体内容,Android 提供了内置支持——MediaStore API 能够轻松访问设备上的所有媒体数据及其对应的缩略图。 以下是如何利用该 API 获取指定视频/照片缩略图的一段 Java 实现: ```java Bitmap thumbnail = null; try { ContentResolver contentResolver = context.getContentResolver(); Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; // 替换为 IMAGE 如果需要图片 Cursor cursor = contentResolver.query(uri, new String[]{MediaStore.Video.Thumbnails.DATA}, MediaStore.Video.Media._ID + "=" + videoId, null, null); if (cursor != null && cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA); String filePath = cursor.getString(columnIndex); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 8; // 缩放因子 thumbnail = BitmapFactory.decodeFile(filePath, options); } } catch (Exception e) { Log.e("ThumbnailError", "Failed to load thumbnail.", e); } return thumbnail; ``` 此方法允许开发者直接提取已有的系统级预览图,并进一步对其进行优化或者保存到应用私有目录下以便后续调用[^4]。 --- #### 4. 自动生成项目依赖元信息 值得注意的是,在某些情况下可能还需要记录所使用的 Support Library 版本号等细节信息。现代构建工具如 Gradle 已经能够自动将这些元数据注入至最终产物之中,无需额外维护冗余配置项[^2]。 例如,添加如下 `<meta-data>` 即可追踪当前项目的 support library 版本情况: ```xml <meta-data android:name="android.support.VERSION" android:value="${supportLibraryVersion}" /> ``` 其中 `${supportLibraryVersion}` 应由 build.gradle 文件动态替换实际数值。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值