关于imageloader的使用以及调用系统相机相片 三星手机上的旋转90度解决

有一个相机类,它是利用bitmap加载并解决了旋转问题

/**
 * 调用系统相机拍照工具类
 * @author yao
 *
 */
public class CaremaUtil {
	private static String strImgPath = "";// 照片的绝对路径
	private static String imgPath = "";// 照片所在文件夹路径
	// 保存的拍照文件
	private static File out;
	/**
	 * 相机照相并返回图片名字
	 */
	public static String cameraMethod(Activity activity, int requestCode) {
		// 实例化拍照的Intent
		Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		// 设置图片存放的路径,Environment.getExternalStorageDirectory()得到SD卡的根目录
		// 先验证手机是否有sdcard
		String status = Environment.getExternalStorageState();
		if ((Environment.MEDIA_MOUNTED).equals(status)) {
			strImgPath = getImgPath();
			// 本地保存原图
			File file = new File(strImgPath);
			Uri u = Uri.fromFile(file);
			imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, u);
			// 启动ACITIVITY
			activity.startActivityForResult(imageCaptureIntent, requestCode);
			LogUtil.log("imageName---" + getImageName());
		} else {
			Toast.makeText(activity, "没有储存卡", 0).show();
		}
		return getImageName();
	}
	/**
	 * 返回图片的绝对路径
	 * 
	 * @return
	 */
	public static String getImgPath() {
		imgPath = getImagePath();// 存放照片的文件夹
		LogUtil.log("图片存放的路径-----" + strImgPath);
		String imageName = getImageName();
		LogUtil.log("图片全名路径---" + imageName);
		// 检查存放的路径是否存在,如果不存在则创建目录
		try {
			out = new File(imgPath);
			if (!out.exists()) {
				out.mkdirs();
			}
			// 在此目录下创建文件
			out = new File(imgPath, imageName);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 该照片的绝对路径
		strImgPath = imgPath + imageName;
		return strImgPath;
	}
	/**
	 * 得到图片所在的文件夹的路径
	 * 
	 * @return
	 */
	public static String getImagePath() {
		return Environment.getExternalStorageDirectory().getAbsolutePath() + "//"
				+ SoftApplication.softApplication.getString(R.string.app_name) + "/approvalPic/";
	}
	/**
	 * 得到图片的名字
	 * 
	 * @return
	 */
	public static String getImageName() {
		// 给相片命名
		String imageName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";// 照片命名
		return imageName;
	}
	/**
	 * 显示图片并得到图片字节字符串
	 * 
	 * @param resultCode
	 * @param data
	 */
	public static String showPic(Activity activity, Intent data, ImageView imageView) {
		String iamgeStr = new String();
		File file = new File(strImgPath);
		try {
			Uri uri = Uri.fromFile(file);
			BitmapFactory.Options options = new BitmapFactory.Options();
			options.inJustDecodeBounds = true;
			// 简单的压缩
			BitmapFactory.decodeStream(activity.getContentResolver().openInputStream(uri), null, options);
			options.inSampleSize = 4;
			options.inJustDecodeBounds = false; // 压缩完后便可以将inJustDecodeBounds设置为false
			// 把流转化为Bitmap图片
			Bitmap bitmap = BitmapFactory.decodeStream(activity.getContentResolver().openInputStream(uri), null,
					options);
			android.provider.MediaStore.Images.Media.insertImage(activity.getContentResolver(), bitmap, null, null);
			activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
			
			// 得到图片的旋转角度
			int degree = getBitmapDegree(strImgPath);
			// 根据旋转角度,生成旋转矩阵
			Matrix matrix = new Matrix();
			matrix.postRotate(degree); 
			Bitmap returnBm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
			imageView.setImageBitmap(returnBm);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
			byte[] bitmapByte = baos.toByteArray();
			iamgeStr = StringUtil.encodeStr(bitmapByte);
			LogUtil.log("iamgeStr", Log.ERROR, iamgeStr);
			// LogUtil.log("iamgeStr1", Log.ERROR, imageStr1);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return iamgeStr;
	}
	/**
	 * 清除本地拍照缓存
	 */
	public static void clearCacheImage() {
		File filecache = new File(getImagePath());
		LogUtil.log("filecache---" + filecache.getPath());
		if (filecache != null && filecache.listFiles() != null) {
			for (File file : filecache.listFiles()) {
				if (file.isFile()) {
					file.delete(); // 删除所有文件
					LogUtil.log("删除所有文件");
				}
			}
		}
	}
	
	/**
	 * 获取原始图片的角度(解决三星手机拍照后图片是横着的问题)
	 * @param path 图片的绝对路径
	 * @return 原始图片的角度
	 */
	public static int getBitmapDegree(String path) {
		int degree = 0;
		try {
			// 从指定路径下读取图片,并获取其EXIF信息
			ExifInterface exifInterface = new ExifInterface(path);
			// 获取图片的旋转信息
			int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
					ExifInterface.ORIENTATION_NORMAL);
			Log.e("jxf", "orientation" + orientation);
			switch (orientation) {
			case ExifInterface.ORIENTATION_ROTATE_90:
				degree = 90;
				break;
			case ExifInterface.ORIENTATION_ROTATE_180:
				degree = 180;
				break;
			case ExifInterface.ORIENTATION_ROTATE_270:
				degree = 270;
				break;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return degree;
	}
}

如果要使用imagloader如何解决?

imagloader使用介绍:

点击打开链接

网上很详细

我用imagloader加载本地uri图片并正确角度显示片:

/**
     * 设置图片URL
     * @param imageUrl
     */
    public void setImageUrl(String imageUrl){
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .considerExifParams(true).build();
        if(!imageUrl.contains("http://") && !imageUrl.contains("https://")){
            imageUrl = "file:///"+imageUrl;
        }
        ImageLoader.getInstance().displayImage(imageUrl , imageView , options ,new HHYImageLoadListener() , new HHYImageLoadProgressListener());


    }
其中重点就是

considerExifParams(true)
让其 是否考虑JPEG图像EXIF参数(旋转,翻转)

这样显示出来的图片就是正常角度的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值