2010-01-23 48 views

回答

7

PHP没有内置的支持来做你的要求。你需要

  • 执行其他命令行脚本/程序,可以

  • 安装许多图像处理库之一,并与

  • 工作可能找到一个第三方的API,您可以发送请求并获得合并图像的响应?

  • 请执行周华健建议(需要安装:http://bg.php.net/manual/en/imagick.setup.php

+0

上http://bg.php.net/imagick良好的通话埃米尔忘了这一点 – 2010-01-23 18:29:39

+0

如果你可以安装imagick扩展,为什么你不能安装GD?对于这个问题,为什么你不能使用GD?它已被默认启用,因为永远... – Charles 2010-01-23 18:39:32

+0

heh是啊 - 我真的会推动使用GD。 – 2010-01-23 19:08:34

2

如果没有像GD或ImageMagick这样的库,就无法在PHP中进行图像处理。

-1

我用这段代码块在我的项目合并各种图像到一个:

<?php 

/* example invocation: http://www.yourserver.com/combine.php?dir=/images/ */ 

set_time_limit(5*60); 

function sanitize($input) { 
    $input=strip_tags($input); 
    $input=str_replace("<","<",$input); 
    $input=str_replace(">",">",$input); 
    $input=str_replace("#","%23",$input); 
    $input=str_replace("'","`",$input); 
    $input=str_replace(";","%3B",$input); 
    $input=str_replace("script","",$input); 
    $input=str_replace("%3c","",$input); 
    $input=str_replace("%3e","",$input); 
    $input=trim($input); 
    return $input; 
} 


//accept path to images via http param dir (e.g. '/templates/corporate/images/okb/' -- include trailing slash) 
$rel = ''; 
if (array_key_exists("dir", $_REQUEST)) $rel = sanitize($_REQUEST["dir"]); 
if ($rel=='') die(); 
$rt = $_SERVER['DOCUMENT_ROOT'] . $rel; 

$i = 0; 
$imgBuf = array(); 
$maxW=0; $maxH=0; 
$imagesperline = 5; 
$curlineW = 0; 
$curlineMaxH = 0; 
$imagespacing=5; 

$dir = opendir ($rt); 

while (false !== ($link = readdir($dir))) 
{ 

    $len = strlen($link); 
    $off = $len - 3; 
    $ext = substr($link, $off, 3); 

    $file = $rt . $link;  

    switch($ext) 
    { 
     case 'png': 
      $iTmp = imagecreatefrompng($file); 
      break; 
     case 'gif': 
      $iTmp = imagecreatefromgif($file); 
      break;     
     case 'jpeg':    
     case 'jpg': 
      $iTmp = imagecreatefromjpeg($file); 
      break; 
     default: 
      continue;     
    } 

    array_push ($imgBuf,$iTmp); 

    $i++; 
    if ($i == $imagesperline + 1) 
    { 
     $i = 0; 
     $maxW=($maxW>$curlineW)?$maxW:$curlineW; 
     $curlineW = 0; 
     $maxH+=$curlineMaxH+$imagespacing; 
     $curlineMaxH=0; 
    } 
    else 
    { 
     $ix = imagesx($iTmp); 
     $iy = imagesy($iTmp); 
     $curlineW+=$ix+$imagespacing; 
     $curlineMaxH=($iy>$curlineMaxH)?$iy:$curlineMaxH; 
    }  
} 

$iOut = imagecreate ($maxW,$maxH) ; 
$i=1; 
$curxpos = 0; 
$curypos = 0; 
$curlineMaxH=0; 

foreach ($imgBuf as $img) 
{ 
    if ($i <= $imagesperline) 
    { 
     $ix = imagesx($img); 
     $iy = imagesy($img); 

     imagecopy ($iOut,$img,$curxpos,$curypos,0,0,$ix,$iy); 
     $curxpos+=$ix + $imagespacing; 
     $curlineMaxH=($iy>$curlineMaxH)?$iy:$curlineMaxH; 
    } 
    else 
    { 
     $i = 0; 
     $curxpos = 0; 
     $curypos += $curlineMaxH + $imagespacing; 
     $curlineMaxH = 0; 
     imagecopy ($iOut,$img,$curxpos,$curypos,0,0,$ix,$iy);  
    } 
    imagedestroy ($img); 
    $i++; 
} 

imagegif($iOut); 

closedir ($dir); 
?> 
+0

这是使用GD – 2010-06-20 01:01:33

相关问题