如何使用PHP来合并图片

> 最近小邪玩了一下PHP,很不错,代码的可读性很高,如果有兴趣学习其实也不是很难的。
> 话说上次做了一个直接提供PR图片的API,蛮不错的,但是看 Webmasterhome 已经有了。

> 还以为白做了呢,不过发现那个貌似没用掉了,怎么样都不肯显示,所以,嘿嘿嘿嘿。
> 这次打算做另外一个API,需要用到图片合并功能,O(∩_∩)O,先保密,下篇文章揭晓喔。

1. Image 图像函数说明

2. Image 图像函数所支持的图像格式

3. 合并图像所需函数

> Getimagesize - 取得图像大小
> Imagecreatefromgif - 从 GIF 文件或 URL 新建一图像
> Imagecreatefromjpeg - 从 JPEG 文件或 URL 新建一图像
> Imagecreatefrompng - 从 PNG 文件或 URL 新建一图像

> Imgcopy - 拷贝图像的一部分

> Imagegif - 以 GIF 格式将图像输出到浏览器或文件
> Imagejpeg - 以 JPEG 格式将图像输出到浏览器或文件
> Imagepng - 以 PNG 格式将图像输出到浏览器或文件

4. Imgcopy 函数详解

5. PHP header() 函数详解

6. 首先要将图片载入字符串中

1
2
3
4
5
6
7
$source = '1.png';
$source1 = '2.png';
$target = 'emp.png';
 
$source_img = imagecreatefrompng($source);
$source_img1 = imagecreatefrompng($source1);
$target_img = imagecreatefrompng($target);

> 首先定义图像的地址为变量以作为 Imagecreatefrompng 函数的参数。
> 当然直接把地址填到函数里也行的,我这样做是我博客页面宽度不够嘛,呵呵。
> 记得直接填写的时候要加上俩个引号在两边喔,我个人比较喜欢单引号,忌混用。

> 当然 Imagecreatefromgif 和 Imagecreatefrompng 也是可以用的喔。
> 这就要看你要处理哪种格式的图像咯,风景方面我比较看中画质,所以用 PNG。

> Emp.Png 是一张完全空白的图片,大小为两个来源图之和,为我们合并其他图像做准备。
> 当然也可以不用,用函数创建一个,但是从学习角度来说,这样子应该容易理解一点。
> 然后 1.Png 2.Png 两个文件是要被合并的图片。

7. 开始横向合并图像

1
2
3
4
5
$size = getimagesize($source);
$size1 = getimagesize($source1);
 
imagecopy ($target_img,$source_img,0,0,0,0,$size[0],$size[1]);
imagecopy ($target_img,$source_img1,$size[0],0,0,0,$size1[0],$size1[1]);

> 用 Getimagesize 函数获得图像的尺寸,产生的是一个数组,$size[0]是宽,$size[1]是高。
> 我们把 Source_img 放到 Target_img 的左上角,坐标为 0:0 的位置。
> 然后把 Source_img1 放到 Target_img 中 Source_img 的右边。
> 所以横坐标为 Source_img 的宽度。

8. 生成或者打印图像

1
2
Header("Content-type: image/png");
imagepng($target_img);

> 在这里说的打印当然不是用打印机咯,呵呵,是显示在你的屏幕上。
> 先使用 Header 函数向客户端发送原始的 HTTP 报头,告诉他你这个图片是PNG格式。
> 然后使用 imagepng 输出即可,就会显示在屏幕上咯,可以右键另存为来着,嘿嘿。

1
imagepng($target_img,'3.png');

> 当然也可以保存为文件呢,这样就好咯,相对路径也没问题的喔。

> O(∩_∩)O,其实写博有利于学习,你要让别人听懂,自己就一定要弄透彻,才能讲解出来。

9. 欢迎来 Follow 我的 Twitter @AngelSolo

Leave a comment

57 Comments.

  1. 开心凡人 坐沙发!#1

    这是什么水果呀,有点像tecoberry

  2. QiQiBoY 坐板凳!#2

    这个怎么用,啥地方能用到呢?

    • @QiQiBoY , 可以很方便的生成图片计数器喔 ~
      或者某些图自动覆盖啊 ~
      还是加水印都可以用到的喔 ~ :smile:

    • @QiQiBoY , 嘿嘿 这个可以达到水印效果的 ~

      1
      2
      
      bool imagecopymerge ( resource $dst_im , resource $src_im , 
      int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

      将 src_im 图像中坐标从 src_x ,src_y 开始,宽度为 src_w ,
      高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。
      两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。
      当 pct = 0 时,实际上什么也没做,
      当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,
      它对真彩色图像实现了 alpha 透明。

  3. 阿吴 躺地板!#3

    看不明白啊!

  4. 一米 天花板!#4

    学习了,每天一看,每天学点。

  5. 第三眼 下水道!#5

    难道以后真的会诞生网页版ps? :biggrin:

  6. 你注意到GOOLGE上面的那个动画了吗?就是搜索条下面那个,你把鼠标放到视频、图片等各种链接上,会有一个圆点变成图案,很好玩的。是不是和博主的是一个道理

  7. PHP居然有这函数。。。。高,实在是高

    • @万戈 , 哈哈 爱死PHP鸟 ~ :razz:

    • @万戈 , 在 wp-includes/link-template.php 文件中:
      修改:

      1
      2
      
      $defaults['base'] = user_trailingslashit(trailingslashit(get_permalink()) 
      . 'comment-page-%#%', 'commentpaged');

      为:

      1
      2
      
      $defaults['base'] = user_trailingslashit(get_permalink() 
      . 'comment-page-%#%', 'commentpaged');

      大概在1628行 ~ :biggrin:

  8. 有点像CSS加水印的

  9. 代码!代码.期待ing

  10. ( ⊙o⊙ )哇 你技术不错啊```

  11. 用PHP来合拼图片不如用PS快。。

  12. 哇,不错,自动可以加水印。。。 :rolleyes:

    • @网络砖家 , 恩,嘿嘿,很好玩的 ~ :smile:

    • @网络砖家 ,

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      
      <!-- comment info -->
      <div id="comment_header">
      <div id="comment_info">
      <?php if ( $user_ID ) : ?>
      <?php
      if (function_exists('wp_logout_url')) {
      $logout_link = wp_logout_url();
      } else {
      $logout_link = get_option('siteurl') 
      . '/wp-login.php?action=logout';
      }
      ?>
      <div class="row">
      <?php _e('Logged in as', 'elegantbox'); ?> 
      <a href="<?php echo get_option('siteurl'); ? rel="nofollow">
      /wp-admin/profile.php"><strong>
      <?php echo $user_identity; ?></strong></a>.
       <a href="<?php echo $logout_link; ? rel="nofollow">" 
       title="<?php _e('Log out of this account', 
       'elegantbox'); ?>">
       <?php _e('Logout &raquo;', 'elegantbox'); ?></a>
      </div>
       
      <?php else : ?>
      <?php if ( $comment_author != "" ) : ?>
      <script type="text/javascript">
      function setStyleDisplay(id, status)
      {document.getElementById(id).style.display = status;}
      </script>
      <div class="row">
      <?php printf(__('Welcome back <strong>%s</strong>.', 
      'elegantbox'), $comment_author) ?>
      <span id="show_author_info">
      <a href="javascript:void(0);" 
      onclick="MGJS.setStyleDisplay('author_info','');
      MGJS.setStyleDisplay('show_author_info','none');
      MGJS.setStyleDisplay('hide_author_info','');">
      <?php _e('Change &raquo;', 'elegantbox'); ?></a></span>
      <span id="hide_author_info">
      <a href="javascript:void(0);" 
      onclick="MGJS.setStyleDisplay('author_info','none');
      MGJS.setStyleDisplay('show_author_info','');
      MGJS.setStyleDisplay('hide_author_info','none');">
      <?php _e('Close &raquo;', 'elegantbox'); ?></a></span>
      </div>
      <?php endif; ?>
       
      <div id="author_info">
      <div class="row">
      <input type="text" name="author" id="author" 
      class="textfield" value="<?php echo $comment_author; ?>"
      size="24" tabindex="1" />
      <label for="author" class="small">
      <?php _e('Name', 'elegantbox'); ?> 
      <?php if ($req) _e('(required)', 'elegantbox'); ?></label>
      </div>
      <div class="row">
      <input type="text" name="email" id="email" 
      class="textfield" value="<?php echo $comment_author_email; ?>"
      size="24" tabindex="2" />
      <label for="email" class="small">
      <?php _e('E-Mail (will not be published)', 'elegantbox');?>
      <?php if ($req) _e('(required)', 'elegantbox'); ?></label>
      </div>
      <div class="row">
      <input type="text" name="url" id="url" class="textfield" 
      value="<?php echo $comment_author_url; ?>" 
      size="24" tabindex="3" />
      <label for="url" class="small">
      <?php _e('Website', 'elegantbox'); ?></label>
      </div>
      </div>
       
      <?php if ( $comment_author != "" ) : ?>
      <script type="text/javascript">
      setStyleDisplay('hide_author_info','none');
      setStyleDisplay('author_info','none');</script>
      <?php endif; ?>
       
      <?php endif; ?>
      </div>
      </div>
  13. 看到技术贴我就犯病,不过这个功能很有趣

  14. 话说PHP很好很强大。。

  15. 可惜我不会啊
    多希望我也可以写好程序啊

  16. PHP真的不是一般的强大,这就是技术吧。

  17. 水平越来越高了。。。。

  18. 很牛很强大!

  19. 看来 你每天都在研究技术哦。。。

  20. 这个有技术,有点意思啊,但是想不到哪里能应用上这个。

  21. 看了那么多,才知道PS来的方便,呵呵

    • @阿里 , 汗 我为下一篇文章做铺垫来着 ~
      下一篇有关显示数字 ~
      0 - 999999 随意选 使用 PHP 的话可以达到即时组合的目的 ~
      用 PS 做 999999 张图片就杯具了 ~

  22. 每次来你的博客,我都感觉自己会的东西实在是太少了,不知道什么时候才会学出一点皮毛

Leave a Reply

:evil: :razz: :wink: :rolleyes: :redface: :cry: :biggrin: :lol: :idea: :mrgreen: :mad: :exclaim: more »

[ Ctrl + Enter ]