精华内容
下载资源
问答
  • 3.根据每个层图片,将其合并一张图(每图像素尺寸非固定的) 所以根据以上要求,我创建了如下的编辑器: 在以上的编辑器中,可以在笔刷面板添加图片,然后在层级面板添加新的层级,用来绘制新的图片。 那核心的...

    最近在写一个自己的小项目,在项目中,我想写这么一个地图编辑器:
    1.将游戏地图划分一个N个正方形格子
    2.地图编辑器有分层功能,类似于PS的图层,在每一个图层上我可以设置指定的图片。
    3.根据每个层图片,将其合并为一张图(每张图像素尺寸非固定的)
    所以根据以上要求,我创建了如下的编辑器:
    在这里插入图片描述
    在以上的编辑器中,可以在笔刷面板添加图片,然后在层级面板添加新的层级,用来绘制新的图片。
    那核心的问题就是,如何将多张图片合并为一张图片?
    我想的方法以下几种方法:
    1.使用shader ,但是shader 合并图片的数量有限,在限定最多合并数量的前提下,使用shader是一个不错的选择。
    2.使用C# 代码合并,在这个项目,我打算使用这种方式来实现。在不考虑性能前提下,可以支持我将N张图片合并为一张图片。
    3.使用PS这一类图片软件,将需要图片进行合并。(但明显不是我需要的)
    明确了需求,也有了解决途径,接下里就得需要进行实现。

     public static Texture MergeTex(Texture2D[] texs)
        {
            //图片数量小于1 则 直接返回null
            if (texs.Length < 1) return null;
            //设定第一张图我们将要生成的图片尺寸
            Texture2D nTex = new Texture2D(texs[0].width,texs[0].height, TextureFormat.ARGB32,true);
            Color[] colors = new Color[nTex.width*nTex.height];
            for (int i = 0; i < texs.Length; i++)
            {
                //合并像素数量不相等的情况下 长宽的比例
                float wRate = 1, hRate = 1;
                if (texs[i].width != nTex.width)
                    wRate = texs[i].width / (float)nTex.width;
                if (texs[i].height != nTex.height)
                    hRate = texs[i].height / (float)nTex.height;
                for (int w = 0; w < nTex.width; w++)
                {
                    for (int h = 0; h < nTex.height; h++)
                    {
                        //做一个旋转,否则得到图片的朝向不正确
                        Color color = texs[i].GetPixel((int)(h * hRate),(int)((w) * wRate));
                        int index = w * nTex.width + h;
                        if (colors[index] == null) {
                            colors[index] = color;
                            continue;
                        }
                        //如果当前像素的透明为不透名 则直接进行颜色替换
                        if (color.a == 1)
                            colors[index] = color;
                        else //否则将rgb*透明度,进行颜色相加
                            colors[index] = colors[index] + new Color(color.r * color.a, color.g * color.a, color.b * color.a);
                    }
                }
            }
            nTex.SetPixels(colors);
            nTex.Apply();
            return nTex;
        }
    

    实现效果:
    在这里插入图片描述
    在不同像素数量的图片合并下,可能会造成上层图片的失真现象。
    注意,为了能读取图片的像素信息,需要在图片的Inspector中将Read/Write Enable 开启。
    在这里插入图片描述

    展开全文
  • 此脚本将个图像合并为一个图像。 图像按最大图像的尺寸平铺,并输出为具有透明度的 PNG。 例如,这可用于从一系列单独的图像创建精灵表。 要求 Python 3 Pillow,友好的 PIL fork ( ),与 zlib 一起安装 用法 ...
  •  类似拼图游戏中,我们常常要将多张图片拼成一张图片。这些小图片的特征类似:宽,高每张都相等。 Delphi 7代码如下: program Gigsaw; {$APPTYPE CONSOLE} uses SysUtils,jpeg,Graphics; var i,j:...

        类似拼图游戏中,我们常常要将多张图片拼成一张图片。这些小图片的特征类似:宽,高每张都相等。

    Delphi 7代码如下:

    program Gigsaw;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,jpeg,Graphics;
    
    var
    i,j:integer;
    jp: TJPEGImage;
    bmp_t, bmp: TBitmap;
    sfile,sDir:string;
    y,yMax,xMax: Integer;
    
    begin
       for i:= 0 to ParamCount do
        writeln(paramStr(i));
      if ParamCount < 4 then
      begin
        writeln('参数总数少于4,程序即将退出!');
        writeln('usage:' + paramStr(0) + ' [列图片个数] [图片目录] [合并后名字] [图片1] [图片2] ...');
        readln;
        exit;
      end;
      //第一个参数,一列图片个数
      //第二个参数,图片所在的目录
      //第三个参数, 合并后图片的名字(将保存在上述目录)
      //第四个至第N个参数,小图片的名字
    
    
    
      try
      sDir  := paramStr(2);
      sfile := paramStr(3);
      jp := TJPEGImage.Create;
      bmp := TBitmap.Create;
      bmp.PixelFormat:=pf32bit;
      bmp_t := TBitmap.Create;
      bmp_t.PixelFormat:=pf24bit;
      bmp.Width:=0;
      bmp.Height:=0;
      j:=0;
      yMax := strtoint(paramStr(1)) -1 ;
      xMax := (ParamCount - 3) div yMax;
      jp.LoadFromFile(sDir + paramStr(4));
      for i:=0 to yMax -1 do
        bmp.Height := bmp.Height+jp.Height;
      bmp.Width := jp.Width * xMax;
    
    
      i:= 4;
      while i <=  ParamCount do
      begin
        j := 0 ;
        for y:= 0 to yMax -1 do
        begin
          jp.LoadFromFile(sDir + paramStr(i));
          bmp_t.Assign(jp);
          bmp.Transparent := true;
          bmp.Canvas.Draw( (i-4) div (yMax) * jp.Width, j, bmp_t);
          j:=j+jp.Height;
          inc(i);
    
          if i > ParamCount then
            break;
        end;
    
      end;
    
    
    
      jp.Assign(bmp);
    
      jp.SaveToFile(sDir + sfile);
    
      bmp.Free;
      bmp_t.Free;
      jp.Free;
      Writeln('Done!!');
      except
       on e: Exception do
          begin
            writeln('exception occured:' + E.Message);
            readln;
          end;
       end;
    
    end.
    

     

    展开全文
  • 且和多张图片合并一张 <?php $fontUrl = '/usr/share/fonts/truetype/myyuanjian/汉仪细中圆简.ttf'; $fontUrl = '/usr/share/fonts/truetype/arphic/ukai.ttc'; header("Content-type: image/png"); ...

    文字换行生成一张图片

    且和多张图片合并为一张

     

    <?php
    $fontUrl = '/usr/share/fonts/truetype/myyuanjian/汉仪细中圆简.ttf';
    $fontUrl = '/usr/share/fonts/truetype/arphic/ukai.ttc';
    header("Content-type: image/png");
    mb_internal_encoding("UTF-8"); // 设置编码
    
    
    
    
    function autowrap($fontsize, $angle, $fontface, $string, $width) {
    // 这几个变量分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
        $content = "";
        // 将字符串拆分成一个个单字 保存到数组 letter 中
        for ($i = 0; $i < mb_strlen($string); $i++) {
            $letter[] = mb_substr($string, $i, 1);
        }
        foreach ($letter as $l) {
            $teststr = $content . "" . $l;
            $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
    //        var_dump($teststr, $testbox);
            // 判断拼接后的字符串是否超过预设的宽度
            if (($testbox[2] > $width) && ($content !== "")) {
                
                $content .= "\n";
            }
            $content .= $l;
        }
        return array($content, $testbox);
    }
    //
    $imgWidth = 640;
    $imgHeight = 1024;
    $text = "前段时间练习使用 PHP 的 GD 库时,为了文本的自动换行纠结了很久。虽然可以通过插入 \n 实现换行,但考虑到文本中既有中文又有英文,强制限定每多少个文字就换行的效果很差。后来终于找到了一个英文下的自动换行的方法,其大概原理是将空格作为分隔符,将字符串分割为一个个单词,然后再一个接一个地拼接在一起,判断其长度是否超过画布,若超过则换行再拼接,否则继续拼接。考虑到中文需要将每个文字都拆开,所以我进行了一点修改,完整代码如下。";
    list($text, $textBox) = autowrap(14, 0, $fontUrl, $text, 640); // 自动换行处理
    $imgHeight = $textBox[1] - $textBox[7] + 20;
    $bg = imagecreate($imgWidth, $imgHeight); // 创建画布
    $color = imagecolorAllocate($bg,250,250,250);   //分配一个灰色
    imagefill($bg,0,0,$color); 
    $white = imagecolorallocate($bg, 0, 0, 0); // 创建白色
    // 若文件编码为 GB2312 请将下行的注释去掉
    // $text = iconv("GB2312", "UTF-8", $text);
    imagettftext($bg, 13, 0, 20, 30, $white, $fontUrl, $text);
    imagejpeg($bg, '/tmp/words.jpg');
    imagedestroy($bg);
    //exit();
    
    //人物
    $path_1 = "/tmp/2.jpg";
    //装备图片
    $path_2 = "/tmp/5.jpg";
    
    $path_3 = "/tmp/words.jpg";
    
    $img1Info = getimagesize($path_1);
    $img2Info = getimagesize($path_2);
    $img3Info = getimagesize($path_3);
    
    $mWidth = 640;
    $mHeight = $img1Info[1] + $img2Info[1] + $img3Info[1];
    
    //将人物和装备图片分别取到两个画布中
    $image_1 = imagecreatefromjpeg($path_1);
    $image_2 = imagecreatefromjpeg($path_2);
    
    $image_4 = imagecreatefromjpeg($path_3);
    ////创建一个和人物图片一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)
    //$image_3 = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));
    
    $image_3 = imageCreatetruecolor($mWidth,$mHeight);
    
    
    
    //为真彩色画布创建白色背景,再设置为透明
    $color = imagecolorallocate($image_3, 255, 255, 255);
    imagefill($image_3, 0, 0, $color);
    //imageColorTransparent($image_3, $color);
    //首先将人物画布采样copy到真彩色画布中,不会失真
    $xPos = $img1Info[0] > $mWidth ? 0 : ($mWidth - $img1Info[0])/2;
    $tmpWidth = $img1Info[0] > $mWidth ? $mWidth : $img1Info[0];
    imagecopyresampled($image_3,$image_1,$xPos,0,0,0,$tmpWidth,imagesy($image_1),imagesx($image_1),imagesy($image_1));
    //再将装备图片copy到已经具有人物图像的真彩色画布中,同样也不会失真
    
    $xPos = $img2Info[0] > $mWidth ? 0 : ($mWidth - $img2Info[0])/2;
    $tmpWidth = $img2Info[0] > $mWidth ? $mWidth : $img2Info[0];
    imagecopyresampled($image_3,$image_2,$xPos,$img1Info[1],0,0,$tmpWidth,imagesy($image_2),imagesx($image_2),imagesy($image_2));
    
    imagecopyresampled($image_3,$image_4,0,$img1Info[1] + $img2Info[1],0,0,min($mWidth, imagesx($image_4)),imagesy($image_4),imagesx($image_4),imagesy($image_4));
    
    
    //imagecopymerge($image_3,$image_2, 0,$img1Info[1],0,0,imagesx($image_2),imagesy($image_2), 100);
    //imagecopymerge($image_3,$image_4, 0,$img1Info[1] + $img2Info[1],0,0,imagesx($image_2),imagesy($image_2), 100);
    //将画布保存到指定的gif文件
    //imagegif($image_3);
    imagepng($image_3);
    imagedestroy($image_3);

     

    转载于:https://www.cnblogs.com/bandbandme/p/6071356.html

    展开全文
  • [MenuItem("Tools/合并多张图片", false, 4)] public static void Test() { string path = Application.dataPath + "/sucai"; Debug.Log(path); DirectoryInfo folder = new DirectoryInfo(path); var files =...

    一、前言

    最近项目内接到一个需求,使用工具将序列帧转化为Texture。研究了一波,发现unity本身可以实现,于是有了这个东西。

    先说一下思路:直接从文件夹读取到需要操作的图片,然后将图片依次写入一张新建的Texture。

    废话不多说,直接上代码

    以下为从文件夹读取到jpg的图片,然后通过FileStream转换成Texture2D。(以下为测试使用,部分参数未规范化,请轻喷...)

    [MenuItem("Tools/合并多张图片", false, 4)]
        public static void Test()
        {
            string path = Application.dataPath + "/sucai";
            Debug.Log(path);
            DirectoryInfo folder = new DirectoryInfo(path);
            var files = folder.GetFiles("*.jpg");
            Debug.Log("files count :" + files.Length);
            Texture2D[] texture2Ds = new Texture2D[files.Length];
            int count = files.Length;
            for (int i = 0; i < files.Length; i++)
            {
                Debug.Log(files[i].Name);
                //EditorUtility.DisplayProgressBar("合并图片--->" + files[i].Name, "0%", i / count);
                FileStream fs = new FileStream(path + "/" + files[i].Name, FileMode.Open, FileAccess.Read);
                int byteLength = (int)fs.Length;
                byte[] imgBytes = new byte[byteLength];
                fs.Read(imgBytes, 0, byteLength);
                fs.Close();
                fs.Dispose();
                //因为懒得去写比例,所以直接将原图尺寸写入了
                Texture2D t2d = new Texture2D(1280, 720);
                ///这一步会将图片转换成实际大小
                t2d.LoadImage(imgBytes);
                t2d.Apply();
                texture2Ds[i] = t2d;
                //Color col = t2d.GetPixel(t2d.width / 2, t2d.height / 2);
                //Debug.Log(col);
            }
            Texture2D tex = MergeMoreTex(texture2Ds);
            byte[] bytes = tex.EncodeToPNG();
            //File.WriteAllBytes(Application.dataPath + "/out.png", bytes);
            EditorUtility.ClearProgressBar();
            EditorApplication.ExecuteMenuItem("Assets/Refresh");
        }

    以下部分为将多个Texture2D对象写入一张大图,大图的尺寸我用的4096*4096。因为给我的图片尺寸本身不标准,所以写完后拿到的图最后会有空缺的部分。

    public static Texture2D MergeMoreTex(Texture2D[] texs)
        {
            if (texs.Length < 1) return null;
            Texture2D nTex = new Texture2D(4096, 4096, TextureFormat.ARGB32, true);
            Color[] colors = new Color[nTex.width * nTex.height];
            int startw, starth;
            startw = 0;//横向写入偏移
            starth = 0;//纵向写入偏移
            //以下计算横向跟纵向个数可能会出现大部分空余,这里的计算能满足我自己的需求,没有测试过复杂情况。有需要可以修改
            //根据数量计算横向个数
            int wcnt = Mathf.CeilToInt(Mathf.Sqrt(texs.Length / 1.8f));
            //纵向个数
            int hcnt = Mathf.FloorToInt(wcnt * (1280f / 720f));
            //单张高度
            int oneh = Mathf.FloorToInt(4096 / hcnt);
            //单张宽度
            int onew = Mathf.FloorToInt(4096 / wcnt);
            for (int i = 0; i < texs.Length; i++)
            {
                for (int h = 0; h < oneh; h++)
                {
                    for (int w = 0; w < onew; w++)
                    {
                        Color color = texs[i].GetPixelBilinear((float)w / onew, (float)h / oneh);
                        int index = h * nTex.width + w + startw + (starth * 4096);
                        if(index >= colors.Length)
                        {
                            Debug.LogError("数组越界");
                            continue;
                        }
                        if (colors[index] == null)
                        {
                            colors[index] = color;
                            continue;
                        }
                        colors[index] = color;
                    }
                    
                }
                startw += onew;
                if(startw + onew > 4096)
                {
                    starth += oneh;
                    startw = 0;
                }
            }
            nTex.SetPixels(colors);
            nTex.Apply();
            return nTex;
        }

    以上就是所有的东西了,然后附上效果图(截图)

    因之前没有操作过这一块的东西,欢迎指出不足之处~。

    噢,对了。这个没法支持不透明的图~

    参考链接:https://blog.csdn.net/qq_18192161/article/details/104941792?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

     

    更新:具体计算单张图占比以及大小有问题,只需要看思路好了...

    请看后续:Unity之合并多张图片为一张大图(二)

    展开全文
  • if(count($goodsThumb)){return json_encode(['code'=>-101,'message'=>'未接收到图片','data'=>'']);} $editor = Grafika::createEditor(); $imageBack = Grafika::createBlankImage(1200, count($goodsThumb)*...
  • 异步下载多张图片, 合并一张显示  //开启子线程  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  NSLog(@"%@",[NSThread currentThread]);   //下载...
  •   现有一文件夹,其中包含多张图片,希望能够将这些图片按几行几列合并一张大图并显示 2. 实现 * 关闭窗口后重新打开 dev_close_window() dev_open_window (0, 0, 600, 400, 'black', WindowHandle) * 创建一张...
  • 可以将多张图片合并一张图片,例如将不同风景的图片合为一张,非常好的哦!
  • 将两张图片或多张图片进行合并,并在本地生成一张新的图片
  • 针对之前宽高遗留的问题,需要原始序列帧图片的宽高为2的次幂。然后根据宽高比、数量曲计算单测个数,最后得到宽高。 //是否是宽图 bool isHor = impWidth > impHeight; float ratio = isHor ? (float)impWidth...
  • 照片拼图在线制作 自带多种照片拼图模板,自由排版将多张照片合成一张相信大家在网上看到过很多类似照片拼图效果的图片一张图片里面含有多张不同的照片,有的是排列有序,有的则是随意排版,效果看起来也是很美的...
  • 实例请访问http://www.walkerjava.com/thread-136-1-1.htmlpublic class Test4 { public static void main(String[] args) throws Exception { InputStream is1 = new FileInputStream("d:\\...
  • 1.多张图片合成一张比如: 图片合成,可以显示在浏览器上面同时保存到文件夹下面 实例如下所示: <?php /** * 图片合并 **/ $pic_list = array( 'img2.png', 'img2.png', 'logo.png', 'logo.png', '...
  • //合并多张图片一张图片 public String mergeImgFile(List<String> list ,String assignUser, String filePath) { int size = list.size(); int height = 0; if (size == 0) { height = 150 * 1; } ...
  • 生成多张合并图片

    2020-12-07 09:40:33
    <div><p>我有个需求,有260张连续图片,...希望生成多张4*3的合并图。 目前,如果使用-s合并,只能生成一张270M的图片,没法使用</p><p>该提问来源于开源项目:gkajs/gka</p></div>
  • 1.多张图片合成一张比如: 图片合成,可以显示在浏览器上面同时保存到文件夹下面 <?php /** * 图片合并 **/ $pic_list = array( 'img2.png', 'img2.png', 'logo.png', ...
  • 现在使用GetPixels32和SetPixels32将多张图片合并一张,实测,十张60*90的图片, 合并成一张600*90的时间为2ms以内,还是非常快的,这样做的好处是不用生成图集, 来一张全家福: 再来个硬菜: ...
  • 思路:vue中图片合并  首先准备好要合并的背景图,和请求后得到的二维码, canvas画图,将两背景图和一张二维码用canvas画出来, 将canvas再转为img 注意canvas和图片的清晰图和图片的尺寸位置 开始时...
  • 通过程序下载的百度地图,是文件编码有规则的多张图片,要想得到一张大图片,得一张张来拼,这个工作极其乏味,于是写了个程序来做.不仅快速,而且合并无误差. 仍然需要.NET Framework SDK 2.0或以上版本.
  • Photoshop合并多张jpg为一张动态GIF

    万次阅读 2012-05-12 21:12:31
    Photoshop合并多张jpg为一张动态GIF 1. 在photoshop中打开所有...先将每张图片由背景转换成图层,图片由多张图片转化为一张图片的不同图层 原先是背景,双击红色线处,转换为图层形式 之后就变成图层了。
  • 压缩包内分享了制作思路和使用方式。 就是加载一个图库,把你想要的目标图片,用图库里的N张图拼成一张你想要的目标图片的像素图
  • 使用UIGraphics实现多张图片合并

    千次阅读 2017-07-27 11:58:06
    如何实现一张图片呈现多张图片?你可以把里边的任何一张照片旋转,颠倒……但是原理不变。 本代码转载自:http://blog.csdn.net/qq350116542/article/details/50413239 // 1.把多张绘制成一张图片  func ...
  • Java将多张图片合成为一张,类似于PhotoShop中的合成图片,将两张图片合成输出为一张JPG,两幅图像叠加在一起,这是个比较基础的Java图像合成的例子。在JAVA中实现图片合成,本例的实现核心代码如下:  InputStream...
  • <div><p>默认是把当前页面中的所有__sprite图合并在一起&...这样个页面会不会造成重复的图片,可以共用图片吗,特别像icon这种可以归类的图片</p><p>该提问来源于开源项目:fex-team/fis</p></div>
  • 多张图片和文字合成一张图片

    千次阅读 2018-10-22 09:22:00
    /// 调用此函数后使此两种图片合并,类似相册,有个 /// 背景图,中间贴自己的目标图片 /// </summary> /// <param name="sourceImg">粘贴的源图片</param> /// <param name="destIm....
  • 因为项目需求,把GIF,JPG,PNG的图片解析为一张张图片合并为包括有图的大图,包括GIF的帧图片,主要用途是用做UGUI的表情展示,把大图转换格式Sprite,Sprite Mode:Multiple,然后用Sprite Editor进行切割,如果...
  • 我们会有以下二维码合成单GIF图的场景需求: 1、怎样把几支付宝付款码合成一张动态的二维码图轮流切换然后扫描识别; ...如下图两微信公众号二维码图片合并成一二维码动态图: →→→...
  • 本文的文字及图片来源于...这篇文章要做的事情,如标题所述,就是提取多张excel表上的数据或信息,合并汇总到一张新表上,这是我们工作中经常会遇到的事情。 比如将每月销售情况汇总到一张表上进行销售情况分析,比如

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 502
精华内容 200
关键字:

多张图片合并一张