解决调用系统拍照保存的图片被压缩的问题

来源:互联网 发布:vmware tools下载mac 编辑:程序博客网 时间:2024/06/13 21:40

这几天在做微信分享,要求实现拍照分享的功能。本想用网上的方法调用系统的相机然后拍照保存就可以了,没想到保存后的图片是压缩过的。没办法,自己动手吧。

研究一阵子后发现原来原因就是这句话

bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
图片压缩了,,

既然知道原因了,,我改还不行么,,

废话不多说了,直接把代码贴过来,不难大家应该很容易就看懂了

package com.cuk.maskmanager.share;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import com.cuk.maskmanager.MainActivity;import com.cuk.maskmanager.MallActivity;import com.cuk.maskmanager.R;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;/** *  * 拍照页面 *  * @author zz *  */public class PhotoActivity extends Activity {private TextView mall, home;private String fileName_cle;private String fileName_dim;private Button but_photo_paizhao;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_photo);viewinit();topinit();}private void topinit() {mall = (TextView) findViewById(R.id.tv_sharetop_mall);home = (TextView) findViewById(R.id.tv_sharetop_home);mall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent2 = new Intent(PhotoActivity.this,MallActivity.class);startActivity(intent2);}});home.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent2 = new Intent(PhotoActivity.this,MainActivity.class);startActivity(intent2);finish();}});}private void viewinit() {but_photo_paizhao = (Button) findViewById(R.id.but_photo_paizhao);but_photo_paizhao.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);File out = new File(getPhotopath());fileName_cle = getPhotopath();Uri uri = Uri.fromFile(out);intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//这里就是将原图保存下来startActivityForResult(intent, 2000);}});}/** * 获取原图片存储路径 *  * @return */private String getPhotopath() {// 照片全路径String fileName = "";// 文件夹路径String pathUrl = Environment.getExternalStorageDirectory() + "/mymy/";String imageName = "imageTest.png";File file = new File(pathUrl);file.mkdirs();// 创建文件夹fileName = pathUrl + imageName;return fileName;}/** * 根据路径获取图片资源(已缩放) *  * @param url *            图片存储路径 * @param width *            缩放的宽度 * @param height *            缩放的高度 * @return */private Bitmap getBitmapFromUrl(String url, double width, double height) {BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true; // 设置了此属性一定要记得将值设置为falseBitmap bitmap = BitmapFactory.decodeFile(url);// 防止OOM发生options.inJustDecodeBounds = false;int mWidth = bitmap.getWidth();int mHeight = bitmap.getHeight();Matrix matrix = new Matrix();float scaleWidth = 1;float scaleHeight = 1;// 按照固定宽高进行缩放// 这里希望知道照片是横屏拍摄还是竖屏拍摄// 因为两种方式宽高不同,缩放效果就会不同// 这里用了比较笨的方式if (mWidth <= mHeight) {scaleWidth = (float) (width / mWidth);scaleHeight = (float) (height / mHeight);} else {scaleWidth = (float) (height / mWidth);scaleHeight = (float) (width / mHeight);}// 按照固定大小对图片进行缩放matrix.postScale(scaleWidth, scaleHeight);Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, mWidth, mHeight,matrix, true);// 用完了记得回收bitmap.recycle();return newBitmap;}/** * 存储缩放的图片 *  * @param data *            图片数据 */private void saveScalePhoto(Bitmap bitmap) {// 照片全路径String fileName = "";// 文件夹路径String pathUrl = Environment.getExternalStorageDirectory().getPath()+ "/mymy/";String imageName = "imageScale.png";FileOutputStream fos = null;File file = new File(pathUrl);file.mkdirs();// 创建文件夹fileName = pathUrl + imageName;fileName_dim = fileName;try {fos = new FileOutputStream(fileName);bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);} catch (FileNotFoundException e) {e.printStackTrace();} finally {try {fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 2000 && resultCode == Activity.RESULT_OK) {Bitmap bitmap = getBitmapFromUrl(getPhotopath(), 313.5, 462.0);saveScalePhoto(bitmap);Intent intent2 = new Intent(this, ShareActivity.class);intent2.putExtra("fileName_cle", fileName_cle);intent2.putExtra("fileName_dim", fileName_dim);startActivity(intent2);this.finish();}}}

原理很简单,就是在拍照之后先保存即可,,

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网上买东西手机号填错了怎么办 买东西电话号码填错了怎么办 淘宝联盟扣54分怎么办 联盟被扣54分怎么办 ofo押金退了余额怎么办 网购还没收货就已签收怎么办 理财公司倒闭分公司法人怎么办 公司让离职不想走怎么办 公司让离职自己不想走怎么办 小孩子有购物狂病怎么办 拉杆箱的轮子卡怎么办 想你了怎么办的英文 那现在怎么办 英文怎写 平安证券账号忘了怎么办 发现发票是假的怎么办 公司收到假发票入账了怎么办 手表皮带有汗味怎么办 利客来购物卡丢了怎么办 乐天玛特倒闭卡怎么办 lv皮带买长了怎么办 密袋鼠咬了人怎么办 lv皮带如果长了怎么办 天赐农场公众号进不去了怎么办 苹果删了订阅号怎么办 蚂蚁借呗没有自动扣款怎么办 有对方qq号名字怎么办 腾讯模拟器刺激现场注册上限怎么办 丹阳智慧人社登入密码忘了怎么办? ipad系统被锁了怎么办 电脑管理员账号删了怎么办 自己电脑删文件需要管理员怎么办 苹果电脑管理员密码忘记了怎么办 电脑提示安全设置不允许下载怎么办 微信和ipad同步怎么办 苹果6空间已满怎么办 苹果6内存虚满怎么办 监控主机密码忘了怎么办 加购物车不下单怎么办 绑定qq账号消息不见了怎么办 现在的注册微信怎么办 爱奇艺手机号码被别人绑定了怎么办