Android拼接合并图片生成长图

代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。

假设根目录的Pictures下已经有两张图片zhang.jpg和phil.jpg,最终把这两张图片合并成zhangphil.jpg的长图:

package zhangphil.test;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
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 {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.drawable_activity);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {merge();}});}private void merge() {new Thread(new Runnable() {@Overridepublic void run() {File zhang = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhang.jpg");File phil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "phil.jpg");try {Bitmap bitmap1 = BitmapFactory.decodeStream(new FileInputStream(zhang));Bitmap bitmap2 = BitmapFactory.decodeStream(new FileInputStream(phil));Bitmap newBmp = newBitmap(bitmap1, bitmap2);File zhangphil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg");if (!zhangphil.exists())zhangphil.createNewFile();save(newBmp, zhangphil, Bitmap.CompressFormat.JPEG, true);} catch (Exception e) {e.printStackTrace();}}}).start();}public static Bitmap newBitmap(Bitmap bmp1, Bitmap bmp2) {Bitmap retBmp;int width = bmp1.getWidth();if (bmp2.getWidth() != width) {//以第一张图片的宽度为标准,对第二张图片进行缩放。int h2 = bmp2.getHeight() * width / bmp2.getWidth();retBmp = Bitmap.createBitmap(width, bmp1.getHeight() + h2, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(retBmp);Bitmap newSizeBmp2 = resizeBitmap(bmp2, width, h2);canvas.drawBitmap(bmp1, 0, 0, null);canvas.drawBitmap(newSizeBmp2, 0, bmp1.getHeight(), null);} else {//两张图片宽度相等,则直接拼接。retBmp = Bitmap.createBitmap(width, bmp1.getHeight() + bmp2.getHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(retBmp);canvas.drawBitmap(bmp1, 0, 0, null);canvas.drawBitmap(bmp2, 0, bmp1.getHeight(), null);}return retBmp;}public static Bitmap resizeBitmap(Bitmap bitmap, int newWidth, int newHeight) {float scaleWidth = ((float) newWidth) / bitmap.getWidth();float scaleHeight = ((float) newHeight) / bitmap.getHeight();Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);Bitmap bmpScale = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);return bmpScale;}/*** 保存图片到文件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;}
}

合并后生成的长图:

添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Android拼接合并图片生成长图相关推荐

  1. android 照片拼接长图_Android拼接合并图片生成长图-阿里云开发者社区

    Android拼接合并图片生成长图 代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放. 假设根目录的Pict ...

  2. android webview生成长图,Android 生成长图并添加水印(二)

    本文主要介绍一下RecyclerView生成长图. 是接着上一篇Android 生成长图并添加水印(一)写的,不过单独看也是可以的,如有不清楚的地方可以先看上一篇或在下方留言. 先附效果图: Recy ...

  3. 京东商品长图功能来啦 不用改图一键生成长图

    产品是吸引顾客购买的关键,想要提升店铺转化率产品主图优化必不可少?首先基础优化是在设计主图的时候就要注意产品突出,使用场景来设计,根据产品的特点突出卖点,文案搭配要起到辅助的效果等等. 关于主图设计和 ...

  4. WebView 生成长图,截图

    关于 WebView 截图 网上已经有很多例子了,但是在研究使用的时候发现一些问题,在这记录一下,供大家参考. 首先是WebView 的截图,只能截取WebView 内显示的内容.大小也就是WebVi ...

  5. android开发隐藏图片,用美图看看安卓版教你如何隐藏私人图片(图文)

    手机本来就是一件很私人的物品,所以,如果存在手里的图片随便都可以让人翻阅的话,那私密性就没有任何保障了.如何不让其他人轻松就能看到.但自己可以随意调出手机里的私人图片呢?答案就是用美图看看安卓版的图片 ...

  6. Android 将ARGB图片转换为灰度图

    思路如下: 1.读取or照相,得到一张ARGB图片. 2.转化为bitmap类,并对其数据做如下操作: A通道保持不变,然后逐像素计算:X = 0.3×R+0.59×G+0.11×B,并使这个像素的值 ...

  7. js html 生成长图,html生成图片

    # html生成图片 ~~~ *{ margin: 0; } .test{ width: 100px; height: auto; text-align: center; line-height: 1 ...

  8. vue中引入HTMLcanvas生成长图

    项目中需要实现将某块html生成img图片,供用户保存到本地,最终采用html2canvas实现. 1.如何引入html2canvas? 项目架构是vue-cli的单页应用,如果在index.html ...

  9. python多张图片生成ppt_用Python实现ppt转化图片(附带长图合并功能)

    前言 笔者前一阵在学习数据相关的东西,从初学开始,一直在参加社区中的图表小挑战,此项活动是社区出题人给出一定官方数据,参加小挑战的人员可以对数据进行可视化,从而挖掘出有趣的信息. 而这个可视化的过程中 ...

最新文章

  1. 多线程程序 怎样查看每个线程的cpu占用
  2. Java8 forEach
  3. 《快活帮》第九次团队作业:Beta冲刺与验收准备
  4. TensorFlow机器学习实战指南之第一章
  5. codesmith使用的一个小问题
  6. 自定义jackson序列化_Jackson中的自定义反序列化程序和验证
  7. jenkins配置记录(2)--代码发布流程
  8. 选择在共享模式中运行时使用的采样频率和位深度_优化的逻辑(三)干扰相关及扫频仪的使用...
  9. mysql数据库导入视图表失败_一个mysqldump导出失败的案例分析
  10. 纯php实现中秋博饼游戏(2):掷骰子并输出结果
  11. 《AI·未来》 ---- 读书笔记
  12. Nginx优化服务之网页压缩
  13. 服务器网页上传附件按钮无法使用怎么解决,IE上传附件无法点击确定按钮的具体处理方法...
  14. 2016微信数据报告 大数据展示微信生活
  15. 国内免费无限制使用的ChatGPT平台
  16. 互联网电视:OTT TV与IPTV的区别
  17. 整理英语句子:将首字母大写,单词之间只能一个空格,最后加句号
  18. Spring学习【2】
  19. 小虎电商浏览器:拼多多标题关键词怎么找?有什么工具?
  20. C# 实现刻录光盘功能

热门文章

  1. android无限轮播banner图片并且解决banner图片只有2张出现白板的情况,触摸即不轮播
  2. 因安装搜狗输入法而引发的一系列惨案
  3. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
  4. 力扣(566.303)补8.25
  5. NDT(正态分布变换)算法学习
  6. recyclerview滚动到指定条目
  7. Java---设计【运动会成绩管理系统】
  8. linux版本的xmind怎么安装教程,linux安装xmind
  9. Cause: java.sql.SQLExceptioValue ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp
  10. 构建安全新模式,零信任如何破局 ?