热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android调用系统裁剪的实现方法

下面小编就为大家分享一篇Android调用系统裁剪的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Android调用系统裁剪,这个已经使用的很熟悉了。但是近期项目里使用的时候遇到了一些小问题,所以在此整理一下,以作记录。

首先看代码:

Intent intent1 = new Intent("com.android.camera.action.CROP");
      intent1.setDataAndType(Uri.fromFile(new File(image.path)), "image/*");
      intent1.putExtra("crop", "true");
      intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//
      intent1.putExtra("aspectX", 1);
      intent1.putExtra("aspectY", 1);
      intent1.putExtra("outputFormat", Bitmap.CompressFormat.JPEG);
      intent1.putExtra("outputX", 720);
      intent1.putExtra("outputY", 720);
      intent1.putExtra("return-data", false);
      startActivityForResult(intent1, 0x222);

这是修改之前的部分,看着没有任何问题,裁剪能正常进行。而且输出尺寸720*720已经算是比较小了,但是问题出现了,在裁剪图片只使用一小块的时候,图片周围出现了黑框。

一开始没明白黑框是怎么加上去的,以后是服务端处理后加的(服务端多上传到服务器的图片都做了压缩,一般显示缩略图)。但是经过仔细查看,才发现图片在我上传之前就有了黑框,那问题就自然是出在我这里了。

查了好多资料,终究还是发现了问题的所在。因为在裁剪大图片或是高清图时,不管取多小,都不会有黑框,这就自然想到了裁剪后会有边缘的自动填充。

知道了问题的所在,就好解决了,然后就查找解决方法,跟想法一样,就是当图片裁剪后过小时,做填充拉伸。后来找到了这条属性,是这样的:

intent.putExtra("scale", true);
intent.putExtra("scaleUpIfNeeded", true);

这里不做解释,英文的代码都是有实际意义的,看字面意思差不多都能理解。

在用到了这两条重要的属性之后呢,我的裁剪方法就OK了,修改之后代码是这样的:

Intent intent1 = new Intent("com.android.camera.action.CROP");
      intent1.setDataAndType(Uri.fromFile(new File(image.path)), "image/*");
      intent1.putExtra("crop", "true");
      intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//
      intent1.putExtra("aspectX", 1);
      intent1.putExtra("aspectY", 1);
      intent1.putExtra("outputFormat", Bitmap.CompressFormat.JPEG);
      intent1.putExtra("outputX", 720);
      intent1.putExtra("outputY", 720);
      intent1.putExtra("scale", true);
      intent1.putExtra("scaleUpIfNeeded", true);
      intent1.putExtra("return-data", false);
      startActivityForResult(intent1, 0x222);

因为在代码中加入了这一句:

intent1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//

即指定了目标文件,所以在onActivityResult里面可以直接使用tempFile。

以上这篇Android调用系统裁剪的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 在使用高德地图内置导航功能时遇到AMapNavi组件出现空指针异常,经过多次排查发现问题是由于so库的兼容性引起的。本文将详细介绍如何通过调整项目配置来解决这一问题。 ... [详细]
  • 在Windows Server 2008 R2上配置IIS FTP服务
    本文详细介绍了如何在Windows Server 2008 R2操作系统上通过IIS配置FTP服务的过程,包括服务器角色的选择与安装、FTP站点的创建以及必要的服务和防火墙设置检查。 ... [详细]
  • 本文介绍如何在Laravel框架中集成微信支付功能,包括如何配置微信支付环境、处理支付请求及接收支付回调等关键步骤。 ... [详细]
  • 推荐两款实用的网络诊断工具
    大家好,因为一些私事很久没有更新博客了。今天向大家介绍两款非常有用的网络诊断工具——Tracert和Telnet,帮助你更好地理解和解决网络问题。 ... [详细]
  • 在Java应用程序开发过程中,FTP协议被广泛用于文件的上传和下载操作。本文通过Jakarta Commons Net库中的FTPClient类,详细介绍如何实现文件的上传和下载功能。 ... [详细]
  • 三菱PLC SLMP协议报文详解
    本文详细解析了三菱PLC中使用的SLMP协议报文结构,包括其工作原理、通信流程及报文格式,旨在帮助工程师和技术人员更好地理解和运用这一协议。 ... [详细]
  • 使用C# .NET构建UDP点对点聊天应用
    本文详细介绍如何利用C# .NET框架开发一个基于UDP协议的点对点聊天程序,包括客户端与服务器之间的连接建立、数据传输等核心功能。 ... [详细]
  • 本指南详细介绍了如何在同一台计算机上配置多个GitHub账户,并使用不同的SSH密钥进行身份验证,确保每个账户的安全性和独立性。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 2023年最佳PHP开发学习路径推荐
    本文详细探讨了针对不同背景的学习者如何选择最适合自己的PHP开发学习资源,包括书籍、在线课程及培训机构的推荐。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了如何通过WebBrowser控件在用户点击输入框时自动显示图片验证码。该过程可能涉及JavaScript事件的触发与响应。 ... [详细]
  • 深入解析SSL Strip攻击机制
    本文详细介绍了SSL Strip(一种网络攻击形式)的工作原理及其对网络安全的影响。通过分析SSL与HTTPS的基本概念,探讨了SSL Strip如何利用某些网站的安全配置不足,实现中间人攻击,以及如何防范此类攻击。 ... [详细]
author-avatar
笑竹舞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有