Android图片添加水印图片并把图片保存到文件存储
Android图片添加水印图片并把图片保存到文件存储
package zhangphil.test; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.os.Bundle; import android.os.Environment; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class JavaActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drawable_activity); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { add(); } }); } private void add() { new Thread(new Runnable() { @Override public void run() { File zhang = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhang.jpg"); try { //原图片。 Bitmap bitmap1 = BitmapFactory.decodeStream(new FileInputStream(zhang)); //水印图。 Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.logo); //原图片添加水印后形成新的文件。 File zhangphil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg"); if (!zhangphil.exists()) zhangphil.createNewFile(); //原图片添加水印后形成的新Bitmap。在原图片的最左边和做顶部开始添加。 //如果是中间或者底部需要计算x,y的坐标位置。 Bitmap newbitmap = addImageWatermark(bitmap1, bitmap2, 0, 0); //把添加水印后的Bitmap保存到文件。 save(newbitmap, zhangphil, Bitmap.CompressFormat.JPEG, true); } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * 添加图片水印。 * * @param src 源图片 * @param watermark 图片水印 * @param x 起始坐标x * @param y 起始坐标y * @return 带有图片水印的图片 */ public static Bitmap addImageWatermark(Bitmap src, Bitmap watermark, int x, int y) { Bitmap retBmp = src.copy(src.getConfig(), true); Canvas canvas = new Canvas(retBmp); canvas.drawBitmap(watermark, x, y, null); return retBmp; } /** * 保存图片到文件File。 * * @param src 源图片 * @param file 要保存到的文件 * @param format 格式 * @param recycle 是否回收 * @return true 成功 false 失败 */ public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) { if (isEmptyBitmap(src)) return false; OutputStream os; boolean ret = false; try { os = new BufferedOutputStream(new FileOutputStream(file)); ret = src.compress(format, 100, os); if (recycle && !src.isRecycled()) src.recycle(); } catch (IOException e) { e.printStackTrace(); } return ret; } /** * Bitmap对象是否为空。 */ public static boolean isEmptyBitmap(Bitmap src) { return src == null || src.getWidth() == 0 || src.getHeight() == 0; } }
事先需要先放好源图片Pictures/zhang.jpg和水印图片res/drawable/logo.jpg。
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java的基础数据结构简介
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/80747225 java数据结构简介 数据结构是计算机存储,组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或存储效率。数据结构往往同高效的检索算法和索引技术有关。 java中常用的数据结构基本上就是Array数组和Collection以及Map集合,下面我们主要介绍一下Collection以及Map集合的相关信息。 Collection集合 1.集合(collection)有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体 集合被用于存储、获取、操纵和传输聚合的数据。 2.集合框架(Collections Framework)是用来表现和操纵集合的一个统一的体系结构。所有的集合框架都包含以下内容: (1)接口:是代表集合的抽象数据类型。 (2)实现:是集合接口的具体实现。本质上,它们是可重用的数据结构,是一些类。 (3)算...
- 下一篇
13个开发者技能必知必会!
本文翻译自dZone,英文原文链接:https://dzone.com/articles/the-13-developer-skills-that-will-get-you-hired 为了找到今年最受欢迎的开发者技能,原作者接触了一系列HR、CTO、CEO及其他管理人员,他们提供了面试中的一些必须技能,战略考虑和所需掌握的软技能。 一、JavaScript 最近熟练掌握JavaScript的开发者不会没有饭碗。精通JavaScript是目前为止被管理者和HR提到的最频繁的技能。目前市面上JavaScript已经被证明是高可移植性和高价值的技能。 二、Big Data 去年大数据项目持续增长,预计未来一年发展态势依然不会减慢。开发者应当深入理解商业智能、数据分析、机器学习,及其他转换存储聚合大量数据的解决方案。只有这样,开发者才能够帮助公司处理大数据,制定更好的商业决定。 三、Full Stack 很多顶尖公司正在寻找全栈工程师,他们可以轻松地穿梭于大量的技术和平台之间。 四、DevOps 在简历中考虑添加开发运维技能不仅能提高热门工作的竞争胜出概率;DevOps实践轻易地打造更加优秀...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程