Как я могу объединить два изображения в PHP без GD? - PullRequest
2 голосов
/ 23 января 2010

Как объединить два изображения в PHP без GD?

Ответы [ 4 ]

7 голосов
/ 23 января 2010

PHP не имеет встроенной поддержки, чтобы делать то, что вы просите. Вам нужно будет

  • Выполнить другой скрипт / программу командной строки, которая может

  • Установите одну из многих библиотек для работы с изображениями и работайте с этим

  • Возможно, найти сторонний API, который вы можете отправить запрос и получить ответ объединенные изображения?

  • Сделайте, как предложил Эмиль (Требуется установка: http://bg.php.net/manual/en/imagick.setup.php)

3 голосов
/ 23 января 2010

Вы можете использовать Imagick .

2 голосов
/ 23 января 2010

Вы не можете выполнять обработку изображений в PHP без какой-либо библиотеки, такой как GD или ImageMagick.

0 голосов
/ 23 января 2010

Я использовал этот блок кодов в своем проекте для объединения различных изображений в одно:

<?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);
?> 
...