精华内容
下载资源
问答
  • 图片工具类(多张图片合成,图片拼接,图片上写字),java语言实现
  • Canvas画布图片文字拼接合成,生成图片,输入内容,填写到图片
  • 阿里图片合成接口拼接

    千次阅读 2019-01-07 18:55:58
    1、合成图片除非服务器端给配置的图片考虑到了不同设备的分辨率的情况,这对不同的设备给了不同的图,如果不是这样,生成的图片放在不同的设备上有不同程度的拉伸问题。 2、如果两张图片都是服务器端给的url,那么...

    上篇博客我写了把两张图片合成为一张图片。
    那样的合成方式是可以的,也是可以合成成功的。但是这样的合成方式有些许不足
    1、合成的图片除非服务器端给配置的图片考虑到了不同设备的分辨率的情况,这对不同的设备给了不同的图,如果不是这样,生成的图片放在不同的设备上有不同程度的拉伸问题。
    2、如果两张图片都是服务器端给的url,那么我们需要使用图片下载工具,对两张图片分别下载。代码量非常多。

    研究了好久,发现阿里云给我们提供了非常便捷的图片方式。大致原理是将两个url合称为一个url,这个url就是我们最终所需要的那个图片的url,我们只需要下载一个图片来用就可以了。

    效果:在这里插入图片描述

    其中一张图片
    在这里插入图片描述

    需要将下面那个底图和一张二维码图片合成为一张图片。

    阿里云的文档参照 :https://helpcdn.aliyun.com/document_detail/44957.html?spm=a2c4g.11186623.4.4.cd4b35a8uhEMdn#h2-url-2 阿里云将两张图片合成的逻辑在这里展示的是添加水印的方法。
    在这里我将二维码当做水印图片。

    但是这个文档并没有oc的代码,不要紧,我来解释一下,这个文档的本质就是接口拼接,这个规则都在这个文档中。

    我再oc 的角度解释一下。以文档中的那个连接说明一下:
    http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_400/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,t_90,g_se,x_10,y_10

    在这里插入图片描述

    来看这里我解释一下。这里可能是他这个底图的分辨率是400的宽,在这里写明了,当然这里可以不做任何显示将w_400去掉,但是请注意接口拼接w_400只是value,也需要将resize去掉,你可以试一下去掉之后是这样的http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,x_100,y_100。

    你看到中间有一堆代码不认识,不要紧,它是将那个“水印”图片进行了Base64的加密。在这里我提供一个base64加密的链接https://blog.csdn.net/mr_raptor/article/details/50806657 经我验证,这个链接中提供的内容是可用的。这个链接中有一个第三方库。注意在这里插入图片描述
    这个第三方库在git上可以正常下载,我们只需要使用这个库里面的关于base64加密的那三个文件夹即可。在用到的地方导入头文件。在这里插入图片描述

    请注意,关于这个功能我们暂时只用到了编码的方法,解码的方法没有用到。

    这个水印的链接,我们只看到了panda.png 注意这不是一个本地的图片,这也是一个图片的url,但是我们在编码时需要将url前面那一堆的去掉,注意应该是保留**.com/**的所有文本,实际上他的全部链接为http://image-demo.img-cn-hangzhou.aliyuncs.com/panda.png。

    这个链接最后 x_100 y_100 表示水印位置在底图上的位置。关于这些参数的用法,请您参照文档中的在这里插入图片描述

    我这个截图只是个栗子,这里面提供了很多参数,诸位看明白了再用。

    这是我的代码,仅提供参考

    NSString * qrStr = [data.qrCode URLDecodedString];
                            qrStr = [[qrStr componentsSeparatedByString:@".com/"] lastObject];
                            qrStr = [NSString stringWithFormat:@"%@?x-oss-process=image/resize,w_280",qrStr];
                            //base64编码
                            qrStr = [NSString safeUrlBase64Encode:qrStr];
                            NSString * bottomImageUrl = dataSuper.shareImg.imgLink;
                            NSString * shareImageUrl = [NSString stringWithFormat:@"%@?x-oss-process=image/watermark,image_%@,t_90,g_south,y_176",bottomImageUrl,qrStr];
    

    这里我们队url进行了url编码,如果您的服务器没有做url编码操作,可以不看第一句代码。

    如果您没有展示出效果来,这是阿里云提供的错误文档可以参照
    https://error-center.aliyun.com/status/product/Oss

    阿里云的这个功能很神奇。
    欢迎大家使用。

    我是磊怀 2849765859 这是我的qq,欢迎您联系我。

    展开全文
  • 实现两张图片拼接合成图片合成到底图的指定位置。
  • 个人亲测,好用,可以用几张图拼成一张图,我用一个模板图片上面添加了微信头像,一个二维码还有一个昵称,好用,希望能帮到你们。
  • 标题C# 后台 背景图片拼接图片与文字,文字图片生成与背景图片合成 最近有个需求是将生成的邀请码与背景图片合成成为新的图片,查找了一些资料后又整理了一遍,查到了一个群主的帖子,虽然代码略微有点问题,地址是...

    标题C# 后台 背景图片拼接图片与文字,文字图片生成与背景图片合成

    最近有个需求是将生成的邀请码与背景图片合成成为新的图片,查找了一些资料后又整理了一遍,查到了一个群主的帖子,虽然代码略微有点问题,地址是:https://www.cnblogs.com/stulzq/p/6137715.html,下面上修改后的代码,有两个资源图片,是自己做的,第一个是背景图片(500600),第二个是前景图片(200200)。

    在这里插入图片描述

    public ActionResult Index()
            {
                //生成邀请码图片 字符间距 带空格比较简单
                //Image img = CreateImage("1 2 3 4 5 6", true, 12);
    
                //修改照片分辨率大小
                //img = ResizeImage(img, 200, 100);
    
                //保存邀请码图片
                //img.Save("D:/3.jpg");
    
                //开始合并图片
                Image ibpic = Image.FromFile("D:/1.jpg");
                Image inpic = Image.FromFile("D:/2.jpg");
                Bitmap bmp = CombinImage(ibpic, inpic, 0, -100);
                bmp.Save("D:/4.jpg", ImageFormat.Jpeg);
    
                return View();
            }
    
    /// <summary>
            /// 生成文字图片
            /// </summary>
            /// <param name="text"></param>
            /// <param name="isBold"></param>
            /// <param name="fontSize"></param>
            public Image CreateImage(string text, bool isBold, int fontSize)
            {
                int wid = 400;
                int high = 200;
                Font font;
                if (isBold)
                {
                    font = new Font("Arial", fontSize, FontStyle.Bold);
    
                }
                else
                {
                    font = new Font("Arial", fontSize, FontStyle.Regular);
    
                }
                //绘笔颜色
                SolidBrush brush = new SolidBrush(Color.Black);
                StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                format.Alignment = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;
                Bitmap image = new Bitmap(wid, high);
                Graphics g = Graphics.FromImage(image);
                g.Clear(Color.White);//透明
    
                RectangleF rect = new RectangleF(0, 0, wid, high);
                //绘制图片
                g.DrawString(text, font, brush, rect, format);
                //释放对象
                g.Dispose();
                return image;
            }
    
            /// <summary>  
            /// 合并图片  
            /// </summary>  
            /// <param name="imgBack"></param>  
            /// <param name="img"></param>  
            /// <returns></returns>  
            public static Bitmap CombinImage(Image imgBack, Image img, int xDeviation = 0, int yDeviation = 0)
            {
                Bitmap bmp = new Bitmap(imgBack.Width, imgBack.Height);
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.White);
                g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);
                //白色边框
                g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 + xDeviation - 1, imgBack.Height / 2 - img.Height / 2 + yDeviation - 1, img.Width + 2, img.Height + 2);
                //填充图片
                g.DrawImage(img, imgBack.Width / 2 - img.Width / 2 + xDeviation, imgBack.Height / 2 - img.Height / 2 + yDeviation, img.Width, img.Height);
                GC.Collect();
                return bmp;
            }
    
            /// <summary>  
            /// Resize图片  
            /// </summary>  
            /// <param name="bmp">原始Bitmap</param>  
            /// <param name="newW">新的宽度</param>  
            /// <param name="newH">新的高度</param>  
            /// <returns>处理以后的图片</returns>  
            public static Image ResizeImage(Image bmp, int newW, int newH)
            {
                try
                {
                    Image b = new Bitmap(newW, newH);
                    Graphics g = Graphics.FromImage(b);
    
                    // 插值算法的质量    
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height),
                                GraphicsUnit.Pixel);
                    g.Dispose();
                    return b;
                }
                catch
                {
                    return null;
                }
            }
    

    原文:
    https://www.cnblogs.com/wangbg/p/8376293.html

    展开全文
  • 淘宝图片拼接合成工具是一款简易的图片拼接软件,用户只需要导入想要拼接图片(可多选),然后轻轻一点,就可以保存得到想要的长图片了。一般这种工具网店卖家用的比较多,So,有需要的朋友就来下载吧! 使用教程...
  • iOS图片拼接图片文字合成总结

    千次阅读 2017-06-28 00:02:11
    注意事项:项目报错,图片模糊,内存问题,离屏渲染以下是合成的步骤: 先读取两张图片把创建出CGImageRef创建...两张图片合成:- (void)composeImg { UIImage *img = [UIImage imageNamed:@"0.png"]; CGImageRef im
    1. 注意事项:项目报错,图片模糊,内存问题,离屏渲染
    2. 以下是合成的步骤:
      1. 先读取两张图片把创建出CGImageRef
      2. 创建上下文画布
      3. 把图片依次画在画布指定位置上
      4. 从上下文中获得合并后的图片
      5. 关闭上下文
      6. 释放内存

      两张图片合成:- (void)composeImg {
          UIImage *img = [UIImage imageNamed:@"0.png"];
          CGImageRef imgRef = img.CGImage;
          CGFloat w = CGImageGetWidth(imgRef);
          CGFloat h = CGImageGetHeight(imgRef);
      
          //以1.png的图大小为底图
          UIImage *img1 = [UIImage imageNamed:@"1.png"];
          CGImageRef imgRef1 = img1.CGImage;
          CGFloat w1 = CGImageGetWidth(imgRef1);
          CGFloat h1 = CGImageGetHeight(imgRef1);
      
          //以1.png的图大小为画布创建上下文
          UIGraphicsBeginImageContext(CGSizeMake(w1, h1));
          [img1 drawInRect:CGRectMake(0, 0, w1, h1)];//先把1.png 画到上下文中
          [img drawInRect:CGRectMake(100, 100, w, h)];//再把小图放在上下文中
          UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();//从当前上下文中获得最终图片
          UIGraphicsEndImageContext();//关闭上下文
      
          NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
          NSString *filePath = [path stringByAppendingPathComponent:@"01.png"];
          [UIImagePNGRepresentation(resultImg) writeToFile:filePath atomically:YES];//保存图片到沙盒
      
          CGImageRelease(imgRef);
          CGImageRelease(imgRef1);
      }
      图片与文字合成:-(UIImage *)CSImage:(UIImage *)img AddText:(NSString *)text
      {
           
          UIImageView *view = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, img.size.width, img.size.height)];
          view.image = img;
           
           
       
          UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];
       
          [label setNumberOfLines:0];
          label.lineBreakMode = UILineBreakModeWordWrap;
       
          NSString *s = text;
          UIFont *font = [UIFont fontWithName:@"Arial" size:12];
       
          CGSize size = CGSizeMake(320,2000);
       
          CGSize labelsize = [s sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];
          label.frame = CGRectMake(0,0, labelsize.width, labelsize.height);
           
          [view addSubview:label];
       
          return [self convertViewToImage:view];
      }
       
      -(UIImage*)convertViewToImage:(UIView*)v
      {
          CGSize s = v.bounds.size;
           
       
           
          UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
           
          CGContextRef context = UIGraphicsGetCurrentContext();
           
          [v.layer renderInContext:context];
           
          UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
           
          v.layer.contents = nil;
          return image;
           
      }
      图片模糊问题,解决方法:1本身图片有问题,2图片压缩的太狠了,3使用WithOptions函数
      

      如果觉得对你有用,可以微信随意打赏
    展开全文
  • 这是两张图片,底图+二维码 ,“长按识别二维码”是后添加上去的。 至于为什么不直接放一张带二维码的图片呢,这是公司业务需求,下面来说说怎么实现的(二维码后台返回的是一张正方形图片,后期经过处理成这样的)...

     这是两张图片,底图+二维码 ,“长按识别二维码”是后添加上去的。

    至于为什么不直接放一张带二维码的图片呢,这是公司业务需求,下面来说说怎么实现的(二维码后台返回的是一张正方形图片,后期经过处理成这样的)

    public class JointBitmapView extends View {
        private Bitmap bitmap;
    
        public JointBitmapView(Context context, Bitmap bit1, Bitmap bit2) {
            super(context);
            bitmap = newBitmap(bit1, bit2);
        }
    
        public JointBitmapView(Context context) {
            super(context);
        }
    
        public Bitmap makeRoundCorner(Bitmap bitmap, int px) {
            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
            int color = 0xff424242;
            Paint paint = new Paint();
            Rect rect = new Rect(0, 0, width, height);
            RectF rectF = new RectF(rect);
            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            canvas.drawRoundRect(rectF, px, px, paint);
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            canvas.drawBitmap(bitmap, rect, rect, paint);
            return output;
        }
    
        /**
         * 拼接图片
         *
         * @param bit1
         * @param bit2
         * @return 返回拼接后的Bitmap
         */
        public Bitmap newBitmap(Bitmap bit1, Bitmap bit2) {
    
            bit2 = zoomImg(bit2,240,240);
    
            int width = bit1.getWidth();
            int height = bit1.getHeight();
            //创建一个空的Bitmap(内存区域),宽度等于第一张图片的宽度,高度等于两张图片高度总和
            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            //将bitmap放置到绘制区域,并将要拼接的图片绘制到指定内存区域
            Canvas canvas = new Canvas(bitmap);
            canvas.drawBitmap(bit1, 0, 0, null);
            canvas.drawBitmap(bit2, bit1.getWidth() / 2 - (bit2.getWidth() / 2), bit1.getHeight() / 3 * 2, null);
            //添加文字   长按识别二维码
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setTextSize(30);
            paint.setStrokeWidth(2);
            paint.setColor(Color.WHITE);
            //在图片上动态的添加文字
            canvas.drawText("长按识别二维码",bit1.getWidth() / 2 - (bit2.getWidth() / 2)+10, bit1.getHeight() / 3 * 2+(bit2.getHeight())+35,paint);
            return bitmap;
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawBitmap(bitmap, 0, 0, null);
            bitmap.recycle();
        }
    
        public Bitmap zoomImg(Bitmap bm, int newWidth, int newHeight) {
            // 获得图片的宽高   
            int width = bm.getWidth();
            int height = bm.getHeight();
            // 计算缩放比例   
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;
            // 取得想要缩放的matrix参数   
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            // 得到新的图片   www.2cto.com
            Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
            //设置圆角
            newbm = makeRoundCorner(newbm, 250);
            return newbm;
        }
    
    }
    

    里面的注释写的很清楚了,相信大家都能看明白

      new Thread(new Runnable() {
                                    @Override
                                    public void run() {
    
                                        try {
                                            for (int i = 0; i < invitePosterBean.getData().size(); i++) {
                                                URL url = new URL(invitePosterBean.getData().get(i).getImg());
                                                InputStream is = url.openStream();
                                                Bitmap bitmap = BitmapFactory.decodeStream(is);
                                                URL url1 = new URL(invitePosterBean.getData().get(i).getLinkUrl());
                                                InputStream is1 = url1.openStream();
                                                Bitmap bitmap2 = BitmapFactory.decodeStream(is1);
    
                                                /**
                                                 * 这里使用BitmapFactory.decodeStream(InputStream is);方法加载图片可以有效的防止
                                                 * 当内存过大时出现内存溢出的情况
                                                 */
    
                                                bitmap1 = jonintview.newBitmap(bitmap, bitmap2);
                                                bitmaps.add(bitmap1);
                                            }
                                            handler.sendEmptyMessage(1);
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
    
                                    }
                                }).start();

    因为后台返回的图片地址,需要转化成bitmap形式,需要在子线程里面完成。

    展开全文
  • 本篇文章讲的是android下通过NDK开发,使用JNI讲多张图片合成GIF图片。首先看一下最终效果: 这三个图片为和成前的图片。 废话不说,直入主题。一、NDK环境的搭建与Eclipse配置NDK_R7开发环境这里主要是大家查下网上...
  • 该部分代码实现功能:将拼接后的图片(有序列)拼接成视频 代码: #include #include #include using namespace std; using namespace cv; int main() { //Mat src=imread("C:\\Users\\Ad
  • 联系人:石虎QQ: 1224614774 昵称:嗡嘛呢叭咪哄...//GCD 图片合成效果: #import"SHViewController.h" @interfaceViewController() @property(weak,nonatomic)IBOutletUIImageView*imageView;//视图 imageView
  • C# 使用EmguCV 拼接图片(用于多张照片合成全景图) ,一个简单的应用程序,选择几张图片拼接图片,并保存
  • //经过处理后的图片合成新的第二段视频 new Part().changeTs(osNames, "F:\\one.mp4", "F:\\one.ts");//分别转码 来进行拼接 new Part().changeTs(osNames, "F:\\two.mp4", "F:\\two.ts"); new Part()....
  • 第五章 图像合成与拼接 第五章 图像合成与拼接 项目情境 数码时代对设计的要求越来越高同样的风景同样的人物通过Photoshop后期制作可以赋予这些图片新的生命和更深层次的情感通过图像的合成拼接我们可以穿越太空跨过...
  • 主要介绍了PHP实现将几张照片拼接到一起的合成图片功能,可实现多张图片的合并,便于整体打印输出.涉及php字符串、数组的遍历、排序及图片合成、裁剪、缩放等相关操作技巧,需要的朋友可以参考下
  • 多宫格图片合成工具可以实现多种不同的图片合成以及图片特效图片加文字diy图片等组合功能.它能够将多张图片按多宫格样式拼接合成为一张宫格图片,可自由设置拼接而成的图片大小以及每张之间的上下距离以及左右距离,...
  • 实现拼接图片

    2019-11-04 16:15:34
    本代码将实现多张图片合成一张图片的功能。 单击首页中的“+”号,可在相应的位置添加选择的图片,选择完成所有图片,单击“分享”按钮即可分享合成的图片。
  • 全景图片拼接软件

    2019-08-14 16:52:42
    全景图像拼接通过从普通相机拍摄大量图片并将它们拼接在一起以形成具有更大视野的合成图像来工作。 AutoStitch通过自动识别匹配的图像,在全景图像拼接中向前迈出了一步。这允许构建整个全景图而无需任何用户输入。...
  • &lt;?php $pic_w = 240; // 原图宽度 $pic_h = 240; // 原图高度 $pic_w_count=10; //横几个花位 $pic_h_count=10; //纵几个花位 $pic_path="... // 背景图片宽度 $bg_h =...
  • Python拼接图片

    2019-12-13 19:57:32
    图片拼接合成 主要利用了两个函数,一个是图片粘贴paste,一个是调大小resize 文件路径处理,文件图片识别 from PIL import Image import os # import imghdr import json import shutil import time os.makedirs...
  • java 图片合成

    2018-10-30 16:37:38
    纵向拼接多张图片 横向拼接多张图片 用字节数组合成多张图片 ps:(要用Base64 encoder decoder) /** * Java纵向拼接多张图片 * * @param imgs * @param type * @param dst_pic * @return */ public ...
  • 我们来介绍图片编辑(换个新鲜的软件介绍一下哈哈哈),图片拼接,是发朋友圈常用的一种发图方式,因为图片拼接可以将很多照片拼接为一张图,这样我们就可以在朋友圈发更多张图片,今天这个教程是针对电脑版用户使用的...
  • 把两幅有相互重叠部分的图片拼接在一起,合成一副大的图片
  • 全景图片拼接

    千次阅读 2015-01-05 17:41:35
    最近在做老师布的一个作业,原来是要做全景视频合成,可是做出来发现实时性根本达不到,改成全景图片合成吧。废话不多说啦,说说原理。 原理: 1 直方图均衡化对图片三个信道进行归一化处理。 2 柱面投影 3 图片...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 207
精华内容 82
关键字:

图片合成拼接