Android 实现4MB以上大图片压缩不失真方法
2016-04-08 14:06
603 查看
import java.io.ByteArrayOutputStream; import java.io.File; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; import android.util.Base64; public class PictureUtil { /** * 把bitmap转换成String * * @param filePath * @return */ public static String bitmapToString(String filePath) { Bitmap bm = getSmallBitmap(filePath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 40, baos); byte[] b = baos.toByteArray(); int x = b.length; System.out.println("" + x); return Base64.encodeToString(b, Base64.DEFAULT); } /** * 计算图片的缩放值 * * @param options * @param reqWidth * @param reqHeight * @return */ public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { // Calculate ratios of height and width to requested height and // width final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); // Choose the smallest ratio as inSampleSize value, this will // guarantee // a final image with both dimensions larger than or equal to the // requested height and width. inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } /** * 根据路径获得突破并压缩返回bitmap用于显示 * * @param imagesrc * @return */ public static Bitmap getSmallBitmap(String filePath) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, 480, 800); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); } /** * 根据路径删除图片 * * @param path */ public static void deleteTempFile(String path) { File file = new File(path); if (file.exists()) { file.delete(); } } /** * 添加到图库 */ public static void galleryAddPic(Context context, String path) { Intent mediaScanIntent = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(path); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); context.sendBroadcast(mediaScanIntent); } /** * 获取保存图片的目录 * * @return */ public static File getAlbumDir() { File dir = new File( Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getAlbumName()); if (!dir.exists()) { dir.mkdirs(); } return dir; } /** * 获取保存 隐患检查的图片文件夹名称 * * @return */ public static String getAlbumName() { return "sheguantong"; } }
调用:
String content = PictureUtil.bitmapToString("/storage/sdcard0/Pictures/sheguantong/test.jpg");
System.out.println("" + content);
相关文章推荐
- Android之Fragment(一)
- 关于android 图片加载优化
- Android 屏幕适配-图片
- 开发Android,记录一些琐碎的知识
- Android EditText的设置
- Android Studio 2.0 正式版发布啦 (首次中文翻译)
- Android的EditText中添加ImageButton
- ListView缓存优化
- Android apk中安装另一个apk(静默安装 与正常安装)
- android 中右上角的数字BadgeView
- 基于MT6752/32平台 Android L版本驱动移植步骤
- 更新完Android Studio 2.0后的错误
- Android开发小结
- Bitmap+android:tint
- Android 横竖屏切换
- Android手电筒开发
- 这些小工具让你的Android 开发更高效
- Android Studio增量更新方法
- Android基本事件的相应——按钮
- Android Studio 进行单元测试完整教程