在安卓开发中,如果对拍照后的图片进行图片裁剪,如果是调用系统的裁剪,如下:
/*
* 裁剪图片
*/
private void cropPhoto() {
Intent intent = new Intent("com.android.camera.action.CROP");
Uri uri = Uri.parse("file://" + picSavePath);
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// intent.putExtra("aspectX", 3);
// intent.putExtra("aspectY", 2);
intent.putExtra("outputX", cropX);
intent.putExtra("outputY", cropY);
intent.putExtra("scale", "true");
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", "false");
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", "true"); // no face detection
startActivityForResult(intent, CROP_PICTURE);
}
这样,就开始对图片进行裁剪了,但是这样会有一个问题,当裁剪框选择的图片与录入的cropX,xropY的形状不同时,比如传入的参数值是个w>h的长方形,而选择框选择的是w<h的长方形时,这样会导致裁剪的图片结果会被压缩变形。
为了解决压缩变形的问题,我的思路是这样的:
1,先对图片进行裁剪,不设置默认的裁剪图片尺寸。
2.对裁剪后的图片再进行图片的缩放。缩放是采角的矩阵的方式进行的缩放
代码如下:
1.
/*
* 裁剪图片,
*/
private void cropPhotoAndZoom() {
Intent intent = new Intent("com.android.camera.action.CROP");
Uri uri = Uri.parse("file://" + picSavePath);
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("scale", "true");
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", "false");
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", "true"); // no face detection
startActivityForResult(intent, CROP_PICTURE_ANDZOOM);
}
2.
/**
* 裁剪后,根据裁剪框的长宽比,同时根据图片的需求缩放尺寸进行缩放
*
* @param path
* @param x
* 原始的需求尺寸width
* @param y
* heiht
* @return
*/
public static Bitmap toBigZoom(String path, float x, float y) {
Log.e("bitmaputil", "path---" + path + "--x--y--" + x + "--" + y);
Bitmap bitmap = BitmapFactory.decodeFile(path);
if (bitmap != null) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
float sx = 0;
float sy = 0;
if ((float) w / h >= 1) {
sx = (float) y / w;
sy = (float) x / h;
Log.e("bitmaputil---", "w/h--->=1");
} else {
sx = (float) x / w;
sy = (float) y / h;
Log.e("bitmaputil---", "w/h---<1");
}
Matrix matrix = new Matrix();
matrix.postScale(sx, sy); // 长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
Log.e("bitmaputil---", "w---" + resizeBmp.getWidth() + "h--" + resizeBmp.getHeight());
return resizeBmp;
}
return null;
}
2中代码,通过判断裁剪框的w,h比来设置图片是放大是横向放大,还是竖向放大,放大后的效果基本上能满足需求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android生图片裁剪后图片缩放
# android图片尺寸缩放
# android图片压缩变形
# Android调用系统图片裁剪限定尺寸及7.0照相问题的解决方法
# Android实现拍照及图片裁剪(6.0以上权限处理及7.0以上文件管理)
# Android ImageView实现图片裁剪和显示功能
# Android 7.0中拍照和图片裁剪适配的问题详解
# Android图片裁剪功能实现代码
# Android实现相机拍摄、选择、图片裁剪功能
# Android开发从相机或相册获取图片裁剪
# 使用Java代码在Android中实现图片裁剪功能
# android实现图片裁剪的两种方法
# 的是
# 是个
# 会有
# 是这样
# 一个问题
# 能满足
# 长宽
# 大家多多
# 长和
# 就开始
# 大后
# cropX
# outputY
# CompressFormat
# aspectX
# true
# outputX
# aspectY
# cropY
# EXTRA_OUTPUT
相关文章:
如何通过VPS建站实现广告与增值服务盈利?
建站之星安装需要哪些步骤及注意事项?
如何用AWS免费套餐快速搭建高效网站?
家庭服务器如何搭建个人网站?
如何构建满足综合性能需求的优质建站方案?
如何高效生成建站之星成品网站源码?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何通过FTP空间快速搭建安全高效网站?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
javascript基本数据类型及类型检测常用方法小结
建站之星价格显示格式升级,你的预算足够吗?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
定制建站价位费用解析与套餐推荐全攻略
Android使用GridView实现日历的简单功能
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
在线制作视频的网站有哪些,电脑如何制作视频短片?
建站上传速度慢?如何优化加速网站加载效率?
建站之星2.7模板:企业网站建设与h5定制设计专题
Swift中switch语句区间和元组模式匹配
建站之星如何实现五合一智能建站与营销推广?
如何破解联通资金短缺导致的基站建设难题?
宝塔建站无法访问?如何排查配置与端口问题?
定制建站是什么?如何实现个性化需求?
网站制作免费,什么网站能看正片电影?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
测试制作网站有哪些,测试性取向的权威测试或者网站?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
网站制作网站,深圳做网站哪家比较好?
深圳网站制作的公司有哪些,dido官方网站?
建站之星后台管理系统如何操作?
如何设置并定期更换建站之星安全管理员密码?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站之星在线版空间:自助建站+智能模板一键生成方案
高端建站如何打造兼具美学与转化的品牌官网?
清除minerd进程的简单方法
如何快速生成高效建站系统源代码?
javascript中对象的定义、使用以及对象和原型链操作小结
东莞专业制作网站的公司,东莞大学生网的网址是什么?
建站之星后台密码如何安全设置与找回?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
香港服务器租用费用高吗?如何避免常见误区?
常州企业建站如何选择最佳模板?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何配置WinSCP新建站点的密钥验证步骤?
如何批量查询域名的建站时间记录?
黑客入侵网站服务器的常见手法有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。