2010-01-23 50 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

相關問題