精华内容
下载资源
问答
  • java 实现图片拼接

    千次阅读 2019-04-22 15:56:00
    1、想要实现多个图片的纵向和横向拼接。实现代码如下 2、补充发现横向拼接的一个bug 宽度没有增加(已修复) 百度地址:工具jar下载 ...实现图片拼接的代码: import javax.imageio.ImageIO...

    1、想要实现多个图片的纵向和横向拼接。实现代码如下

    2、补充发现横向拼接的一个bug 宽度没有增加(已修复)

    百度地址:工具jar下载

    链接:https://pan.baidu.com/s/1uZCNdwpwXwn9o3wZtSc_5A
    提取码:775r
    复制这段内容后打开百度网盘手机App,操作更方便哦

    实现图片拼接的代码:

    import javax.imageio.ImageIO;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @Author : guoyanan
     * @Title :  处理图片的拼接工具类
     * @Time : 2019/02/11 10:47
     * @Document :
     */
    public class ImageHandle {
    
        /**
         * 图片拼接图片必须长宽一致
         * @param files  需要拼接的图片类型
         * @param type  1-横向拼接,2-纵向拼接
         * @param targetFile 目标文件名称
         */
        public static boolean mergeImage(File[] files, int type ,String targetFile){
            int len = files.length;
            if(len<1){
                throw new RuntimeException("图片数量为0,不可以执行拼接");
            }
           // File[] src = new File[len];
            BufferedImage[] images = new BufferedImage[len];
            int[][] ImageArrays = new int[len][];
    
            for (int i = 0 ; i < len ; i++){
                try {
                   // src[i] = new File(files[i]);
                    images[i] = ImageIO.read(files[i]);
                }catch (Exception e){
                    e.printStackTrace();
                }
    
                int width = images[i].getWidth();
                int height = images[i].getHeight();
                ImageArrays[i] = new int[width * height];
                ImageArrays[i] = images[i].getRGB(0,0,width,height,ImageArrays[i],0,width);
            }
    
            int newHeight = 0;
            int newWidth = 0;
             for(int i = 0; i < images.length;i++){
                 // 横向
                 if(type == 1){
                     newHeight = newHeight > images[i].getHeight() ? newWidth : images[i].getHeight();
              // 错误代码,原先没有添加+ 号 newWidth +
    = images[i].getWidth(); }else if (type == 2){ // 纵向 newWidth = newHeight > images[i].getWidth() ? newWidth : images[i].getWidth(); newHeight += images[i].getHeight(); } } if(type == 1 && newWidth < 1){ return false ; } if(type == 2 && newHeight < 1){ return false; } try { BufferedImage ImageNew = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); int height_i = 0; int width_i = 0; for (int i = 0; i < images.length; i++){ if(type == 1){ ImageNew.setRGB(width_i, 0, images[i].getWidth(), newHeight, ImageArrays[i], 0, images[i].getWidth()); width_i += images[i].getWidth(); }else if (type == 2){ ImageNew.setRGB(0, height_i, newWidth, images[i].getHeight(), ImageArrays[i], 0, newWidth); height_i += images[i].getHeight(); } } // 输出想要的图片 ImageIO.write(ImageNew,targetFile.split("\\.")[1], new File(targetFile)); return true; }catch (Exception e){ e.printStackTrace(); return false; } } public static void main(String[] args){ //String[] files = {"F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg","F:\\tmp\\OK.jpg"}; //mergeImage(files,2,"F:\\OK.jpg"); List<Map<String,String>> lists = new ArrayList<Map<String,String>>(); Map<String,String> map1 = new HashMap<>(); map1.put("id","1"); map1.put("cpid","0"); map1.put("text","One Level"); Map<String,String> map2 = new HashMap<>(); map2.put("id","2"); map2.put("cpid","1"); map2.put("text","Two Level"); Map<String,String> map3 = new HashMap<>(); map3.put("id","3"); map3.put("cpid","2"); map3.put("text","Three Level"); lists.add(map1); lists.add(map2); lists.add(map3); List<Map<String,String>> listUp = new ArrayList<Map<String,String>>(); List<Map<String,String>> listTemp = new ArrayList<Map<String,String>>(); for (int i= 0; i < lists.size();i++){ Map<String,String> map = lists.get(i); if(map.get("cpid")=="0"){ listUp.add(map); lists.remove(i); System.out.println(map.get("text")); } } ItentorMap(listUp,lists,listTemp); } private static void ItentorMap(List<Map<String,String>> listUp,List<Map<String,String>> listDown,List<Map<String,String>> listTemp){ System.out.println("listUp:"+System.identityHashCode(listUp)); System.out.println("listTemp:"+System.identityHashCode(listTemp)); listTemp.clear(); for (int i=0; i<listUp.size(); i++){ Map<String,String> map = listUp.get(i); for(int j = 0; j < listDown.size(); j++){ Map<String,String> mapj = listDown.get(j); if(map.get("id")==mapj.get("cpid")){ listTemp.add(mapj); listDown.remove(j); System.out.println(mapj.get("text")); } } } listUp.clear(); // 必须这样写,如果写成listUp=listTemp,会导致2个list集合的内存地址一样。 for (int i = 0;i<listTemp.size(); i++){ listUp.add(listTemp.get(i)); } System.out.println("listUp:"+System.identityHashCode(listUp)); System.out.println("listTemp:"+System.identityHashCode(listTemp)); if(listDown.size()>0) { ItentorMap(listUp, listDown, listTemp); } } }

     

    转载于:https://www.cnblogs.com/gynbk/p/10750661.html

    展开全文
  • 图片无缝拼接

    2019-11-07 08:44:12
    前段时间做需求一直被一个问题困扰,就是banner图无缝拼接的兼容问题,尤其在一些大屏手机上很容易复现这个问题。 于是各种搜索,期望能找到解决办法,然而网上提供的诸如给img设置display:blo...

    前段时间做需求一直被一个问题困扰,就是banner图无缝拼接的兼容问题,尤其在一些大屏手机上很容易复现这个问题。

    于是各种搜索,期望能找到解决办法,然而网上提供的诸如给img设置display:block;添加vertical-align:top;的方法完全解决不了问题。

    下面提供一个自己摸索出来的方法,供大家参考,如果大家有更好的方法,或者清楚其原理的,欢迎交流学习!

     

    bug复现图

    bug描述:

    如上图:可以看到banner图被切成了2张,拼接的地方有一条线;通常图片拼接有缝的时候,我们会想到一个简单暴力的方法,给下面的图片设置margin-top:-1px;但是这个图不适用,会导致图片衔接处有明显的变形;

    于是我在电脑模拟器上手动调试图片的高度,起初我认为让图片自适应宽度的时候,高度auto,不同的机型解析高度,可能为小数导致的。实则不然,因为手机解析为小数,浏览器最终还是会取整。因此不是浏览器解析的问题,也不是机型像素差异的问题。既然高度是整数为什么还会有缝?这个图的实际高度是544px,我手动改为400px,发现缝竟然没了,于是我1像素1像素调整,发现遇到4的整倍数的时候,缝就会消失。

    于是,我用js代码获取图片高度,判断当高度不为4的倍数的时候,把高度加高为4的整倍数,尝试后发现在能复现bug的手机上,问题解决了。

    但是个别手机,快速拖动图片或者手动强制放大屏幕的时候还是可以看到这个缝。但是正常的用户正常的浏览页面的时候,问题可以说基本是上是解决了。

    bug说明:

    当页面banner过长需要切成2张,或者一个主要由图片拼接而成的静态页面。在一些大屏手机上(如小米mix2、ipad等),可以明显的看到拼接的2张图之间有一条缝隙。

     

    尝试过的解决方案:

    1、2个div之间无margin,banner图作为div的背景图进行拼接,示例页面使用的是这种布局方法;结果:仍然有一条缝

    2、banner图使用img元素,img转块将父元素撑开,父元素之间无padding、margin、border等,审查元素父盒子被img撑开,高度与img高度一致;结果:页面仍然有一条缝

    3、使用vertical-align:top/text-top属性处理img元素,使之在父元素中置顶显示;结果:页面仍然有一条缝

    可行的解决方案:

    1、当图片拼接出现缝隙的时候,检查png格式切图是否有问题,可能png图片顶部有空白导致的;

    2、当拼接的2张图片之间颜色一致时,使用margin-top:-1px的方法,此法简单粗暴,使用css即可解决问题

    3、当页面图片色彩丰富切精细无法用方法2解决时,使用js,获取图片渲染后的高度,将高度设置为4的整倍数;此时图片之间的衔接就不会有缝隙了,并且不会存在明显的图片变形。

    参考文章:https://blog.csdn.net/s12244315/article/details/48825037

     

    下面是方案3代码:(粘上我的源码,仅供参考)

    tips:

    1、必须在图片onload之后才能获取到图片的高度,否则为0;

    2、图片onload之后不要获取地址中的图片高度,要获取dom渲染后的图片自适应高度

    3、如果图片的高度不是4的整倍数,重新赋值

     

    展开全文
  • 问题描述:在h5 中 把一张图片切成多张图片,然后再页面中显示拼接成一张图片. 正常情况:图片 设置成这样,在正常手机上没有问题 ` width: 100%; display: block; ` 谷歌浏览器调试100% 没有问题 !...
  • Android 拼接图片

    2015-06-12 19:57:37
    需要注意的是,图片路径中,最后一个字符是“#”的表示该图片需要进行顺时针90°的翻转,用于纠正手机竖着拍照时照片方向不对 /** * @param context 上下文 * @param photoPaths 图片路径数组 * @param ...

    我只实现是纵向拼接,当然要实现各种各样的拼接道理都是一样的。

    需要注意的是,图片路径中,最后一个字符是“#”的表示该图片需要进行顺时针90°的翻转,用于纠正手机竖着拍照时照片方向不对。

    拼接操作比较耗时,建议放进线程中操作,否则图片一多容易发生ANR。

    /**
    	 * @param context 上下文
    	 * @param photoPaths 图片路径数组
    	 * @param newWidth 限制宽度
    	 * @return 拼接后图片路径
    	 * @throws IOException
    	 */
    	public static String pieceTogetherPhotos(Context context, ArrayList<String> photoPaths, int newWidth) throws IOException {
    		ArrayList<Bitmap> bmps = new ArrayList<Bitmap>();
    		int taotalHeight = 0; //总高度,用与创建拼接后的bitmap
    		
    		//压缩图片
    		for (String path : photoPaths) {
    			boolean rotate = false;
    			if (path.charAt(path.length() - 1) == '#') { //竖拍
    				rotate = true;
    				path = path.substring(0, path.length() - 1);
    			}
    			Bitmap bm = BitmapFactory.decodeFile(path);
    			//获得图片的宽高
    	        int width = bm.getWidth();
    	        int height = bm.getHeight();
    	        //缩放比例
    	        float scale = (float)newWidth / (float)width;
    	        //取得想要缩放的matrix参数
    	        Matrix matrix = new Matrix();
    	        //如果是竖拍先不压缩
    	        if (!rotate) {
    	        	matrix.postScale(scale, scale);
    	        }
    	        //是竖拍先翻转
    	        if (rotate) {
    	        	matrix.postRotate(90);
    	        }
    	        Bitmap newBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
    	        //竖拍需要先翻转后再压缩
    	        if (rotate) {
    	        	width = newBitmap.getWidth();
    		        height = newBitmap.getHeight();
    		        scale = (float)newWidth / (float)width;
    		        matrix = new Matrix();
    		        matrix.postScale(scale, scale);
    		        newBitmap = Bitmap.createBitmap(newBitmap, 0, 0, width, height, matrix, true);
    	        }
    	        bmps.add(newBitmap);
    	        taotalHeight += newBitmap.getHeight();
    		}
    		
    		//拼接图片
    		Bitmap longBmp = Bitmap.createBitmap(newWidth, taotalHeight, Config.ARGB_8888);
    		Canvas canvas = new Canvas(longBmp); //构造画布
    		float currentHeight = 0.0f; //记录最终的高度
    		for (Bitmap bm : bmps) {
    			canvas.drawBitmap(bm, 0.0f, currentHeight, null); //主要方法,在画布某个位置画上图像
    			currentHeight += bm.getHeight();
    		}
    		
    		//保存图片
    		String fileName = "temp.jpg";
    		FileOutputStream fos;
    		fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
    		longBmp.compress(CompressFormat.JPEG, 100, fos);
    		fos.flush();
    		fos.close();
    		
    		//返回图片文件绝对路径
    		return context.getFilesDir().getAbsolutePath() + "/" + fileName;
    	}


    展开全文
  • 开发商城相关的程序时,经常会有分享好友需求,分享图片要求多元素组合图片。使用 七牛云存储水印处理图片 后,在苹果端图片无法正常保存到本地 水印处理后的地址链接如下: http://xxx/xxx.png ?imageView2...

    开发商城相关的程序时,经常会有分享好友需求,分享图片要求多元素组合图片。使用七牛云存储水印处理图片后,在苹果端图片无法正常保存到本地

    水印处理后的地址链接如下:

    http://xxx/xxx.png
    ?imageView2/2/w/586/h/800/q/75|watermark/3
    /image/aHR0cDovL2JpY2FNoZWMTYwL3EvNzU=/dissolve/100/gravity/SouthEast/dx/20/dy/34
    /image/aHR0cDovL2JpY2FveXVhbi5zdW5na2Gl1cy85/dissolve/100/gravity/North/dx/0/dy/0
    |imageslim

    1、其中特别注意链接中的特殊符号 “ |

    查阅相关资料得到结果:是格式的原因
    七牛或者Ucloud返回的链接中包含有特殊符号:管道符“ | ”,这导致在转化成url的时候出错。需要对特殊符号转码一下:

    2、将链接中的 “ | ” 替换成 “ %7C ” 。前端只需要让SDWebImage支持webp即可。

    信息补充:

    3、在处理七牛水印地址转成Base64格式时也要注意把一些特殊符号进行转变,不处理导致水印图片无法正常加载显示。

    ① 将链接中的 “ + ” 替换成 “ ” 。

    ② 将链接中的 “ / ” 替换成 “ ” 。

    展开全文
  • 又找不到好用的软件,我们给大家带来一款软件:一键拼接多张图片为一张图片,一款简单而又实用的小工具,快来下载和我一起使用吧! 软件预览图: 软件版本号:1.0 软件语言:简体中文 运行环境:安卓   官方网站:...
  • 开发项目中遇到一个需求 就是用手机按照顺序拍几张图片 然后将图片拼接成一张全景的照片 百度了一下 看到OpenCV 的Stitcher工具支持全景图片拼接 于是研究了一下OpenCV 花了差不多一周时间才研究出来 呕心沥血的...
  • 一、横向拼接图片顾名思义,将图片横向拼接为一张图片方法:1、打开本站多媒体栏目中的图片拼接工具2、进入新版中3、选择需要横向处理的照片上传到服务器缓存处理区4、设置输出图片的格式如:jpg、png格式等等5、这...
  • 图片拼接,是发朋友圈常用的一种发图方式,因为图片拼接可以将很多照片拼接为一张图,这样我们就可以在朋友圈发更多张图片,今天这个教程是针对电脑版用户使用的哦,手机版的后面我们会继续跟进。首先获取软件资源后...
  • 背景介绍 图片的全景拼接如今已不再稀奇,现在的智能摄像机和手机摄像头...本文主要简单描述如何用 Python 和 OpenCV 库实现两张图片的自动拼合,首先简单介绍一下两张图片拼接的原理。 基本原理 要实现两张图...
  • SpringMVC 上传图片通过base64流 ,在Controller 直接报超长了,,[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/14.gif]...uploads直接超长,手机那边又不能传file类型的,求大神给条明路
  • 在用到单反、无人机、手机等拍照工具,需要无缝拼接。 二、下载 官网:http://www.ptgui.com/download.html 其他:http://pan.baidu.com/share/link?uk=2385937416&shareid=2540448759&third=0 三、教程...
  • python-opencv识别身份证图片拼接

    千次阅读 2019-05-09 19:44:06
    对接的银行要求扫描身份证正反面,放在一张A4纸上,而且大小和原证相同。本来也没啥,扫描就完事了。可单位的扫描仪是老款,一次只能扫一面,放在A4纸...市面上现在有很多扫描APP,用手机就能扫出不错的效果,更是...
  • 图像拼接

    2021-04-23 16:10:36
    手机上照相机的全景照相就是图像拼接的一个应用 特征点匹配 匹配错误的特征点干扰 在进行图像匹配之前都需要找出输入的两张图片(或者多张)的特征点(SIFT特征点)然后再匹配上这些特征点,但是这可能会出现一个...
  • View,智能手机上的全景照片以及诸如和的拼接软件。 在此编程任务中,我们将匹配来自多个图像的SIFT关键点,以构建单个全景图像。 这将涉及多个任务: 使用vlfeat检测SIFT点并为图像中的每个关键点提取SIFT描述符。 ...
  • 背景介绍 图片的全景拼接如今已不再稀奇,现在的智能摄像机和手机摄像头基本都带有...本文主要简单描述如何用 Python 和 OpenCV 库实现两张图片的自动拼合,首先简单介绍一下两张图片拼接的原理。 基本原理 要实现两...
  • android手机全景图片拍摄,选择好拍摄位置后,拍摄位置必须固定,拼接全景才会一致
  • 全景拼接,顾名思义就是将同一场景下几张图片拼接在一起,形成一张全貌图。现在的手机相机普遍有这一个功能,今天我们就来学习一下这一有趣的东西,世界如此之大,无奇不有。 一、图像拼接原理 1.提取图像的特征和...
  • 文章目录1. 图像拼接介绍1.1 图像拼接步骤1.2 图像拼接算法1.2.1 单应性...图像拼接在实际的应用场景很广,小到我们手机的全景图片,大到航天领域和地理图像领域,都会用到推向拼接,图像拼接的结果好坏会直接影响接...
  • 1,本站注册的推广分销人员需要有自己的独有邀请码,这个邀请码需要转换成二维码,并让推广员保存在手机相册中,分发到其它群中,进行二维码图片推广 2,但是单独二维码过于简陋, 不够吸引眼球.需要加一个好看的背景. 3,...
  • openCV 图像拼接-全景图像

    千次阅读 2019-06-04 14:12:07
    图像拼接,就是将多张图片拼接成一个大图,类似手机里的全景照片。按照某大神的思路,可以自己按照如下步骤实现: 对每幅图进行特征点提取 对对特征点进行匹配 进行图像配准 把图像拷贝到另一幅图像的特定位置 ...
  • Python-OpenCV基础:图像的全景拼接

    千次阅读 2018-12-12 20:11:15
    背景介绍 图片的全景拼接如今已不再稀奇,现在的智能摄像机和手机摄像头...本文主要简单描述如何用 Python 和 OpenCV 库实现两张图片的自动拼合,首先简单介绍一下两张图片拼接的原理。 基本原理 要实现两张图...
  • OpenCV简单的拼接多幅图像

    千次阅读 2018-11-04 10:05:05
    由于最近在学习超分辨率算法,但是大多数开源程序输入图片太大就显示显存不够,因此就把手机拍摄的图片先分割成一系列小的图片,超分辨率之后再拼接在一块 OpenCV的程序如下:比较简单,对5x5即25张图片进行拼接: ...
  • 无缝拼接文件 copy/b 使用

    千次阅读 2019-02-21 19:22:16
    打造隐藏文字图片加密 腾讯视频的下载是分段的。记得当时用手机缓存下来的,想在电脑上播放。后来发现好多文件,每一个文件是播放的一部分。。。。。竟然做出这样的事。太令人失望了。我还非要给他合起来。啥也不懂...
  • 就是 用手机 随手拍的照片,经过拼接组成一幅完整图片,用MATLAB 或c语言实现,哪位大神能给点思路,或者提供点代码
  • 图片生成后安卓端打开可以正常保存,唯独苹果手机不可以;找了很久,尝试了很多方式,最后问题在一个博客中找到:https://blog.csdn.net/sir_coding/article/details/53695187 因图片路径是采用七牛图片路径,并...
  • 【辅助驾驶】图像拼接[1]——综述

    千次阅读 2018-12-24 19:48:28
    1.1.1、类似手机全景实现方案 1.1.2、汽车全景环视系统拼接 二、方法 图像拼接分为四个步骤:图像匹配(registration)、重投影(reprojection)、缝合(stitching)和融合(blending)。 1)图像匹配:是...
  • 规避via浏览器,长按图片弹出菜单 if (that.get('logo')) { $(".logo").html('<div class="img" style = "background-image:url(' + that.get('logo') + ')"></div>'); 注意事项 1.通过该属性,规避 ...
  • # 加载中间透明的手机图片 base_img = Image.open(img1_path) # 新建透明底图,大小和手机图一样,mode使用RGBA,保留Alpha透明度,颜色为透明 # Image.new(mode, size, color=0),color可以用tuple表示,分别表示...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 169
精华内容 67
关键字:

手机图片拼接