精华内容
下载资源
问答
  • 图片合成

    2019-04-18 15:21:28
    # 将两张图片合成一张,但是这个代码的毛病就是两个图像的尺寸要一样,并且只能合成png的实例图 import cv2 import numpy as np import matplotlib.pyplot as plt # 读取图片 src1 = cv2.imread('C:/Users/...
    # 将两张图片合成一张,但是这个代码的毛病就是两个图像的尺寸要一样,并且只能合成png的实例图
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 读取图片
    src1 = cv2.imread('C:/Users/Administrator/Desktop/123.png')
    src2 = cv2.imread('C:/Users/Administrator/Desktop/4.png')
    
    # 图像融合
    result = cv2.addWeighted(src1, 0.8, src2, 0.2, 10)
    
    # 显示图像
    #cv2.imshow("src1", src1)
    #cv2.imshow("src2", src2)
    cv2.imshow("result", result)
    
    # 等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    展开全文
  • 图片合成编码,二维码+图片合成,两张图片合成编码最终版
  • 二维码生成, 图片合成, 文字图片合成工具类 亲测有效,可以生成二维码,两张图片合成一张图片,在图片上添加文字
  • 下面小编就为大家分享一篇php图片合成方法(多张图片合成一张),具有很好的参考价值。希望对大家有所帮助。一起跟随小编过来看看吧
  • Android不规则图片合成,不规则相框合成
  • 图片合成软件

    2018-01-24 16:49:59
    图片合成软件 将多张图片合成为一张图片 将多张图片合成为一张图片
  • 图片合成利用Java的绘图方法,实现图片合成在开始之前,先定一个小目标,我们希望通过图片合成的方式,创建一个类似下面样式的图片I. 设计思路首先解析一下我们的目标实现图片合成,那么这些合成的基本组成单元有些...

    图片合成

    利用Java的绘图方法,实现图片合成

    在开始之前,先定一个小目标,我们希望通过图片合成的方式,创建一个类似下面样式的图片

    I. 设计思路

    首先解析一下我们的目标实现图片合成,那么这些合成的基本组成单元有些什么?

    组成基本单元

    图片

    文字

    几何图形

    也就是说,我们可以将任意个图片,文字,几何图形,按照自己的意愿进行拼接,那么问题就转变成两个

    基本单元如何在画布上渲染

    基本单元之间如何配合使用

    II. 基本单元绘制

    首先定义一个基本单元的接口,之后所有组合的元素都继承自这个接口

    接口IMergeCell只定义一个绘制的方法,用于实现该基本单元的绘制方式

    public interface IMergeCell {

    void draw(Graphics2D g2d);

    }

    1. 图片绘制

    绘制图片,一般来讲需要知道:

    绘制的坐标(x,y)

    绘制图片的宽高(w,h),当目标是绘制原图时,宽高一般为图片本身的宽高

    结合上面两点,图片组成单元的定义如下: ImgCell

    @Data

    @Builder

    public class ImgCell implements IMergeCell {

    private BufferedImage img;

    private Integer x, y, w, h;

    @Override

    public void draw(Graphics2D g2d) {

    if (w == null) {

    w = img.getWidth();

    }

    if (h == null) {

    h = img.getHeight();

    }

    g2d.drawImage(img, x, y, w, h, null);

    }

    }

    2. 文本绘制

    图片绘制比较简单,相比而言,文字绘制就麻烦一点,主要是文本绘制的对齐方式,竖排还是横排布局

    首先分析我们需要的基本信息

    考虑对齐方式(居中对齐,靠左,靠上,靠右,靠下)

    因此需要确定文本绘制的区域,所以需要两个坐标 (startX, startY), (endX, endY)

    文本绘制参数

    可以指定字体Font,文本颜色 Color,行间距 lineSpace

    绘制的文本信息

    文本内容 List

    绘制实现

    若单行的文本超过长度上限,则需要自动换行,所以有 batchSplitText 方法,对原文本内容进行分割,确保不会超过边界

    不同的对齐方式,绘制的起始坐标需要计算, 所以在水平布局文字时,需要通过 calculateX方法获取新的x坐标;竖直布局文字时,需要通过 calculateY获取新的y坐标

    实际代码如下

    @Data

    public class TextCell implements IMergeCell {

    private List texts;

    private Color color = Color.black;

    private Font font = FontUtil.DEFAULT_FONT;

    private int lineSpace;

    private int startX, startY;

    private int endX, endY;

    /**

    * 绘制样式

    */

    private ImgCreateOptions.DrawStyle drawStyle = ImgCreateOptions.DrawStyle.HORIZONTAL;

    private ImgCreateOptions.AlignStyle alignStyle = ImgCreateOptions.AlignStyle.LEFT;

    public void addText(String text) {

    if (texts == null) {

    texts = new ArrayList<>();

    }

    texts.add(text);

    }

    @Override

    public void draw(Graphics2D g2d) {

    g2d.setColor(color);

    g2d.setFont(font);

    FontMetrics fontMetrics = FontUtil.getFontMetric(font);

    int tmpHeight = fontMetrics.getHeight(), tmpW = font.getSize() >>> 1;

    int tmpY = startY, tmpX = startX;

    int offsetX = drawStyle == ImgCreateOptions.DrawStyle.VERTICAL_LEFT

    ? (font.getSize() + fontMetrics.getDescent() + lineSpace)

    : -(font.getSize() + fontMetrics.getDescent() + lineSpace);

    // 单行文本自动换行分割

    List splitText = batchSplitText(texts, fontMetrics);

    for (String info : splitText) {

    if (drawStyle == ImgCreateOptions.DrawStyle.HORIZONTAL) {

    g2d.drawString(info, calculateX(info, fontMetrics), tmpY);

    // 换行,y坐标递增一位

    tmpY += fontMetrics.getHeight() + lineSpace;

    } else { // 垂直绘制文本

    char[] chars = info.toCharArray();

    tmpY = calculateY(info, fontMetrics);

    for (int i = 0; i < chars.length; i++) {

    tmpX = PunctuationUtil.isPunctuation(chars[i]) ? tmpW : 0;

    g2d.drawString(chars[i] + "",

    tmpX + (PunctuationUtil.isPunctuation(chars[i]) ? tmpW : 0),

    tmpY);

    tmpY += tmpHeight;

    }

    // 换一列

    tmpX += offsetX;

    }

    }

    }

    // 若单行文本超过长度限制,则自动进行换行

    private List batchSplitText(List texts, FontMetrics fontMetrics) {

    List ans = new ArrayList<>();

    if (drawStyle == ImgCreateOptions.DrawStyle.HORIZONTAL) {

    int lineLen = Math.abs(endX - startX);

    for(String t: texts) {

    ans.addAll(Arrays.asList(GraphicUtil.splitStr(t, lineLen, fontMetrics)));

    }

    } else {

    int lineLen = Math.abs(endY - startY);

    for(String t: texts) {

    ans.addAll(Arrays.asList(GraphicUtil.splitVerticalStr(t, lineLen, fontMetrics)));

    }

    }

    return ans;

    }

    private int calculateX(String text, FontMetrics fontMetrics) {

    if (alignStyle == ImgCreateOptions.AlignStyle.LEFT) {

    return startX;

    } else if (alignStyle == ImgCreateOptions.AlignStyle.RIGHT) {

    return endX - fontMetrics.stringWidth(text);

    } else {

    return startX + ((endX - startX - fontMetrics.stringWidth(text)) >>> 1);

    }

    }

    private int calculateY(String text, FontMetrics fontMetrics) {

    if (alignStyle == ImgCreateOptions.AlignStyle.TOP) {

    return startY;

    } else if (alignStyle == ImgCreateOptions.AlignStyle.BOTTOM) {

    int size = fontMetrics.stringWidth(text) + fontMetrics.getDescent() * (text.length() - 1);

    return endY - size;

    } else {

    int size = fontMetrics.stringWidth(text) + fontMetrics.getDescent() * (text.length() - 1);

    return startY + ((endY - endX - size) >>> 1);

    }

    }

    }

    说明:

    单行文本的分割,使用了博文系列中的工具方法 GraphicUtil.splitStr,有兴趣的关注源码进行查看

    水平布局时,期望 startX < endX, 从习惯来讲,基本上我们都是从左到右进行阅读

    水平or垂直布局,都希望是 startY < endY

    垂直布局时,以字符为单位进行绘制;标点符号的绘制时,x坐标有一个偏移量

    3. Line直线绘制

    几何图形之直线绘制,给出起点和结束点坐标,绘制一条直线,比较简单;这里给出了虚线的支持

    @Data

    @Builder

    public class LineCell implements IMergeCell {

    /**

    * 起点坐标

    */

    private int x1, y1;

    /**

    * 终点坐标

    */

    private int x2, y2;

    /**

    * 颜色

    */

    private Color color;

    /**

    * 是否是虚线

    */

    private boolean dashed;

    /**

    * 虚线样式

    */

    private Stroke stroke = CellConstants.LINE_DEFAULT_STROKE;

    @Override

    public void draw(Graphics2D g2d) {

    g2d.setColor(color);

    if (!dashed) {

    g2d.drawLine(x1, y1, x2, y2);

    } else { // 绘制虚线时,需要保存下原有的画笔用于恢复

    Stroke origin = g2d.getStroke();

    g2d.setStroke(stroke);

    g2d.drawLine(x1, y1, x2, y2);

    g2d.setStroke(origin);

    }

    }

    }

    4. 矩形框绘制

    矩形框绘制,同直线绘制,支持圆角矩形,支持虚线框

    @Data

    @NoArgsConstructor

    @AllArgsConstructor

    @Builder

    public class RectCell implements IMergeCell {

    /**

    * 起始坐标

    */

    private int x, y;

    /**

    * 矩形宽高

    */

    private int w, h;

    /**

    * 颜色

    */

    private Color color;

    /**

    * 是否为虚线

    */

    private boolean dashed;

    /**

    * 虚线样式

    */

    private Stroke stroke;

    /**

    * 圆角弧度

    */

    private int radius;

    @Override

    public void draw(Graphics2D g2d) {

    g2d.setColor(color);

    if (!dashed) {

    g2d.drawRoundRect(x, y, w, h, radius, radius);

    } else {

    Stroke stroke = g2d.getStroke();

    g2d.setStroke(stroke);

    g2d.drawRoundRect(x, y, w, h, radius, radius);

    g2d.setStroke(stroke);

    }

    }

    }

    5. 矩形区域填充

    @Data

    @Builder

    public class RectFillCell implements IMergeCell {

    private Font font;

    private Color color;

    private int x,y,w,h;

    @Override

    public void draw(Graphics2D g2d) {

    g2d.setFont(font);

    g2d.setColor(color);;

    g2d.fillRect(x, y, w, h);

    }

    }

    III. 封装

    上面实现了几个常见的基本单元绘制,接下来则是封装绘制, 这块的逻辑就比较简单了如下

    public class ImgMergeWrapper {

    public static BufferedImage merge(List list, int w, int h) {

    BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2d = GraphicUtil.getG2d(img);

    list.forEach(cell -> cell.draw(g2d));

    return img;

    }

    }

    IV. 测试

    写了一个模板QrCodeCardTemplateBuilder,用于拼装上图的样式,代码较长,不贴了,有兴趣的查看原图

    测试代码如下

    @Test

    public void testTemplate() throws IOException {

    BufferedImage logo = ImageUtil.getImageByPath("logo.jpg");

    BufferedImage qrCode = ImageUtil.getImageByPath("/Users/yihui/Desktop/12.jpg");

    String name = "小灰灰blog";

    List desc = Arrays.asList("我是一灰灰,一匹不吃羊的狼 专注码农技术分享");

    int w = QrCodeCardTemplate.w, h = QrCodeCardTemplate.h;

    List list = QrCodeCardTemplateBuilder.build(logo, name, desc, qrCode, "微 信 公 众 号");

    BufferedImage bg = ImgMergeWrapper.merge(list, w, h);

    try {

    ImageIO.write(bg, "jpg", new File("/Users/yihui/Desktop/merge.jpg"));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    演示图如下:

    84004b0fcfedfaac2b79514d3b51fc2b.gif

    V. 其他

    项目地址:

    系列博文

    扫描关注,java分享

    展开全文
  • 1.多张图片合成一张比如:图片合成,可以显示在浏览器上面同时保存到文件夹下面实例如下所示:

    1.多张图片合成一张比如:

    图片合成,可以显示在浏览器上面同时保存到文件夹下面

    实例如下所示:<?php /** * 图片合并 **/ $pic_list = array( "img2.png", "img2.png", "logo.png", "logo.png", "logo.png", "img2.png", "img2.png", "img2.png", "img2.png" ); $pic_list = array_slice($pic_list, 0, 9); // 只操作前9个图片 $bg_w = 150; // 背景图片宽度 $bg_h = 150; // 背景图片高度 $background = imagecreatetruecolor($bg_w,$bg_h); // 背景图片 $color = imagecolorallocate($background, 202, 201, 201); // 为真彩色画布创建白色背景,再设置为透明 imagefill($background, 0, 0, $color); imageColorTransparent($background, $color); $pic_count = count($pic_list); $lineArr = array(); // 需要换行的位置 $space_x = 3; $space_y = 3; $line_x = 0; switch($pic_count) { case 1: // 正中间 $start_x = intval($bg_w/4); // 开始位置X $start_y = intval($bg_h/4); // 开始位置Y $pic_w = intval($bg_w/2); // 宽度 $pic_h = intval($bg_h/2); // 高度 break; case 2: // 中间位置并排 $start_x = 2; $start_y = intval($bg_h/4) + 3; $pic_w = intval($bg_w/2) - 5; $pic_h = intval($bg_h/2) - 5; $space_x = 5; break; case 3: $start_x = 40; // 开始位置X $start_y = 5; // 开始位置Y $pic_w = intval($bg_w/2) - 5; // 宽度 $pic_h = intval($bg_h/2) - 5; // 高度 $lineArr = array(2); $line_x = 4; break; case 4: $start_x = 4; // 开始位置X $start_y = 5; // 开始位置Y $pic_w = intval($bg_w/2) - 5; // 宽度 $pic_h = intval($bg_h/2) - 5; // 高度 $lineArr = array(3); $line_x = 4; break; case 5: $start_x = 30; // 开始位置X $start_y = 30; // 开始位置Y $pic_w = intval($bg_w/3) - 5; // 宽度 $pic_h = intval($bg_h/3) - 5; // 高度 $lineArr = array(3); $line_x = 5; break; case 6: $start_x = 5; // 开始位置X $start_y = 30; // 开始位置Y $pic_w = intval($bg_w/3) - 5; // 宽度 $pic_h = intval($bg_h/3) - 5; // 高度 $lineArr = array(4); $line_x = 5; break; case 7: $start_x = 53; // 开始位置X $start_y = 5; // 开始位置Y $pic_w = intval($bg_w/3) - 5; // 宽度 $pic_h = intval($bg_h/3) - 5; // 高度 $lineArr = array(2,5); $line_x = 5; break; case 8: $start_x = 30; // 开始位置X $start_y = 5; // 开始位置Y $pic_w = intval($bg_w/3) - 5; // 宽度 $pic_h = intval($bg_h/3) - 5; // 高度 $lineArr = array(3,6); $line_x = 5; break; case 9: $start_x = 5; // 开始位置X $start_y = 5; // 开始位置Y $pic_w = intval($bg_w/3) - 5; // 宽度 $pic_h = intval($bg_h/3) - 5; // 高度 $lineArr = array(4,7); $line_x = 5; break; } foreach( $pic_list as $k=>$pic_path ) { $kk = $k + 1; if ( in_array($kk, $lineArr) ) { $start_x = $line_x; $start_y = $start_y + $pic_h + $space_y; } $pathInfo = pathinfo($pic_path); switch( strtolower($pathInfo["extension"]) ) { case "jpg": case "jpeg": $imagecreatefromjpeg = "imagecreatefromjpeg"; break; case "png": $imagecreatefromjpeg = "imagecreatefrompng"; break; case "gif": default: $imagecreatefromjpeg = "imagecreatefromstring"; $pic_path = file_get_contents($pic_path); break; } $resource = $imagecreatefromjpeg($pic_path); // $start_x,$start_y copy图片在背景中的位置 // 0,0 被copy图片的位置 // $pic_w,$pic_h copy后的高度和宽度 imagecopyresized($background,$resource,$start_x,$start_y,0,0,$pic_w,$pic_h,imagesx($resource),imagesy($resource)); // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度 $start_x = $start_x + $pic_w + $space_x; } header("Content-type: image/jpg"); imagejpeg($background); imagegif($background, "./hero_gam.png"); ?>

    以上这篇php图片合成方法(多张图片合成一张)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持网页设计。

    展开全文
  • 易语言图片合成源码

    2020-07-16 03:11:19
    易语言图片合成源码,图片合成,图片宽度高度文件名,设置大小,左键,被移动,SendMessage
  • YUV图片合成

    2015-06-01 11:34:15
    YUV JGP 图片合成 上下合成
  • 今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成,水印,九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在...

    今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成,水印,九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。

    今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成,水印,九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。

    例子

     代码如下 复制代码

    $imgs = array();

    $imgs[0] = '1.jpg';

    $imgs[1] = '2.jpg';

    $imgs[2] = '3.jpg';

    $imgs[3] = '4.jpg';

    $target = 'emp.jpg';//背景图片

    $target_img = Imagecreatefromjpeg($target);

    $source= array();

    foreach ($imgs as $k=>$v){

    $source[$k]['source'] = Imagecreatefromjpeg($v);

    $source[$k]['size'] = getimagesize($v);

    }

    //imagecopy ($target_img,$source[0]['source'],2,2,0,0,$source[0]['size'][0],$source[0]['size'][1]);

    //imagecopy ($target_img,$source[1]['source'],250,2,0,0,$source[1]['size'][0],$source[1]['size'][1]);

    $num1=0;

    $num=3; //控制列数,一行几列,0为1以此类推。

    $tmp=2;

    $tmpy=2; //图片之间的间距

    for ($i=0; $i<4; $i ){

    imagecopy($target_img,$source[$i]['source'],$tmp,$tmpy,0,0,$source[$i]['size'][0],$source[$i]['size'][1]);

    $tmp = $tmp $source[$i]['size'][0];

    $tmp = $tmp 5;

    if($i==$num){

    $tmpy = $tmpy $source[$i]['size'][1];

    $tmpy = $tmpy 5;

    $tmp=2;

    $num=$num 3;

    }

    }

    Imagejpeg($target_img,'pin.jpg');

    ?>

    pin.jpg

    展开全文
  • 。。。。。。。DELPHI多图片合成一图片
  • 易语言桌面图片合成源码,桌面图片合成
  • JS多张图片合成一张图片代码是一款基于canvas制作多张元素图片合成一张效果代码。 JS多张图片合成一张图片代码截图
  • 今天要项目中要用到图片合成,所以看了下网上的资料和系统 API 图片合成可以用到很多的地方 添加水印 二维码生成的模板合成图片 //开始合成图片 /* *1. 需要绘制的大小 *2. 背景是否是黑色 *3. scale 当前设备的...
  • 如上图所示,如何用java将单一的图片合成如上群头像。在一个正方形外框中,要将多个图片合成上述图片。首先要做的是,依据圆相交的程度,计算圆心坐标与图片间空白区域大小。然后设计不同位置的切割模具,最后再将...
  • 给客户做了两张报表,导出两张图片,但是客户非要导出到一张图片,然后就用java把两张图片合成一张了。packagecom.zws;importjava.awt.Graphics;importjava.awt.p_w_picpath.BufferedImage;importjava.io....
  • .NET 图片合成,图片加文字,图片加二维码,可直接设置背景图绝对路径、要合成的图片地址、宽度、高度、margin-left、margin-top位置进行图片合成。 设置文字位置、文字大小进行图片文字合成,已在多个项目中使用。
  • # 请将第一第二图片合成为下列图片4: ![图片说明](https://img-ask.csdn.net/upload/202009/12/1599901436_366817.png)图片4 ![图片3]...
  • Java 图片合成

    2021-03-26 17:23:50
    在web应用开发,有时候会遇到图片合成的场景,比如生成某某申请表时要合成电子签名、某某签章等水印。下面简单介绍一种图片合成工具。 Thumbnailator是一个用来生成图像缩略图的 Java类库,也可以用来进行图片合成。...
  • 关于图片合成

    2020-12-02 09:40:45
    1.为什么要在iPhone模拟器上进行图片合成? 2.如果是安卓真机要怎么合成图片,依然可以在iPhone模拟器上进行合成吗? 不胜感激。</p><p>该提问来源于开源项目:fengjian0106/hed-tutorial-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,992
精华内容 2,796
关键字:

图片合成