zoukankan      html  css  js  c++  java
  • Android 图片压缩

    Android 图片压缩

    标签(空格分隔): Android


    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();
    		
    		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";
    	}
    }
    
    /* 保存图片 */
     private void saveBitmapToFile(Bitmap bitmap) {
            String url = Environment.getExternalStorageDirectory() + File.separator + "pepelu" + File.separator;
            String filePath2 = url + "2.jpg";
            File file = new File(filePath2);
            // File f = new File(Environment.getExternalStorageDirectory()                 , fileName);
            FileOutputStream fOut = null;
            try {
                file.createNewFile();
                fOut = new FileOutputStream(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            bitmap.compress(Bitmap.CompressFormat.JPEG, 40, fOut);
            try {
                fOut.flush();
                fOut.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    Context#getFilesDir()

  • 相关阅读:
    Git常用命令总结
    自己动手做一个vue组件,并上传npm
    详解树状结构图 vue-org-tree
    npm依赖之tooljs、requestjs
    本地服务器热更新 插件 live-server
    VUE项目引入第三方依赖报错 Uncaught SyntaxError: Unexpected token <
    npm安装依赖报 npm ERR! code Z_BUF_ERROR npm ERR! errno -5 npm ERR! zlib: unexpected end of file 这个错误解决方案
    关于Vue-$router传参出现刷新页面或者返回页面丢失数据的问题
    Vue自行封装常用组件-倒计时
    Vue自行封装常用组件-文本提示
  • 原文地址:https://www.cnblogs.com/mada0/p/5281348.html
Copyright © 2011-2022 走看看