Android的图片压缩类ThumbnailUtils,供源码研究
今天闲的无聊想写一个图片的应用,想压缩图片,百度了下有关于图片压缩的消息
没想到android真给力啊,在2.2后就给我封装了成一个压缩的类
ThumbnailUtils
早知道,就不会去写,原来有在弄关于图片压缩弄的我头好痛啊,也写过关于根据路劲压缩,获取指定大小位图的类
现在好了有 ThumbnailUtils 下面跟就学习学习:
看了下 主要有三个方法可以调用:
1、extractThumbnail (source, width, height):
/**
*
* 创建一个指定大小的缩略图
* @param source 源文件(Bitmap类型)
* @param width 压缩成的宽度
* @param height 压缩成的高度
*/
ThumbnailUtils.extractThumbnail(source, width, height);
2、extractThumbnail(source, width, height, options):
/**
* 创建一个指定大小居中的缩略图
*
* @param source 源文件(Bitmap类型)
* @param width 输出缩略图的宽度
* @param height 输出缩略图的高度
* @param options 如果options定义为OPTIONS_RECYCLE_INPUT,则回收
* @param source这个资源文件
* (除非缩略图等于@param source)
*
*/
ThumbnailUtils.extractThumbnail(source, width, height, options);
3、createVideoThumbnail(filePath, kind):
/**
* 创建一张视频的缩略图
* 如果视频已损坏或者格式不支持可能返回null
*
* @param filePath 视频文件路径 如:/sdcard/android.3gp
* @param kind kind可以为MINI_KIND或MICRO_KIND
*
*/
ThumbnailUtils.createVideoThumbnail(filePath, kind);
今天闲的无聊想写一个图片的应用,想压缩图片,百度了下有关于图片压缩的消息
没想到android真给力啊,在2.2后就给我封装了成一个压缩的类
ThumbnailUtils
早知道,就不会去写,原来有在弄关于图片压缩弄的我头好痛啊,也写过关于根据路劲压缩,获取指定大小位图的类
现在好了有 ThumbnailUtils 下面跟就学习学习:
看了下 主要有三个方法可以调用:
1、extractThumbnail (source, width, height):
/**
*
* 创建一个指定大小的缩略图
* @param source 源文件(Bitmap类型)
* @param width 压缩成的宽度
* @param height 压缩成的高度
*/
ThumbnailUtils.extractThumbnail(source, width, height);
2、extractThumbnail(source, width, height, options):
/**
* 创建一个指定大小居中的缩略图
*
* @param source 源文件(Bitmap类型)
* @param width 输出缩略图的宽度
* @param height 输出缩略图的高度
* @param options 如果options定义为OPTIONS_RECYCLE_INPUT,则回收
* @param source这个资源文件
* (除非缩略图等于@param source)
*
*/
ThumbnailUtils.extractThumbnail(source, width, height, options);
3、createVideoThumbnail(filePath, kind):
/**
* 创建一张视频的缩略图
* 如果视频已损坏或者格式不支持可能返回null
*
* @param filePath 视频文件路径 如:/sdcard/android.3gp
* @param kind kind可以为MINI_KIND或MICRO_KIND
*
*/
ThumbnailUtils.createVideoThumbnail(filePath, kind);
考虑到有的哥们没有下载相关源码 下面则是:[java]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.media;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.media.MediaMetadataRetriever;
import android.media.MediaFile.MediaFileType;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.BaseColumns;
import android.provider.MediaStore.Images;
import android.provider.MediaStore.Images.Thumbnails;
import android.util.Log;
import java.io.FileInputStream;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.OutputStream;
/**
* Thumbnail generation routines for media provider.
*/
public class ThumbnailUtils {
private static final String TAG = "ThumbnailUtils";
/* Maximum pixels size for created bitmap. */
private static final int MAX_NUM_PIXELS_THUMBNAIL = 512 * 384;
private static final int MAX_NUM_PIXELS_MICRO_THUMBNAIL = 128 * 128;
private static final int UNCONSTRAINED = -1;
/* Options used internally. */
private static final int OPTIONS_NONE = 0x0;
private static final int OPTIONS_SCALE_UP = 0x1;
/**
* Constant used to indicate we should recycle the input in
* {@link #extractThumbnail(Bitmap, int, int, int)} unless the output is the input.
*/
public static final int OPTIONS_RECYCLE_INPUT = 0x2;
/**
* Constant used to indicate the dimension of mini thumbnail.
* @hide Only used by media framework and media provider internally.
*/
public static final int TARGET_SIZE_MINI_THUMBNAIL = 320;
/**
* Constant used to indicate the dimension of micro thumbnail.
* @hide Only used by media framework and media provider internally.
*/
public static final int TARGET_SIZE_MICRO_THUMBNAIL = 96;
/**
* This method first examines if the thumbnail embedded in EXIF is bigger than our target
* size. If not, then it'll create a thumbnail from original image. Due to efficiency
* consideration, we want to let MediaThumbRequest avoid calling this method twice for
* both kinds, so it only requests for MICRO_KIND and set saveImage to true.
*
补充:移动开发 , Android ,