2013-09-19 2 views
0

Я не возражаю, если это делается с помощью PHP-скрипта (в идеале Codeigniter, но все в порядке) или с помощью действия Photoshop.Обрезать пробел с изображения, затем изменить размер изображения с помощью «padding»

По сути, я хочу, чтобы получить изображение, которое я могу сделать следующее:

  1. Обрежьте все «скучные» пробелы вокруг изображения
  2. Изменить размер максимум 380px (высота & ширина)
  3. Наконец подушечка изображения к 400px х 400 (например, поставить свои собственные «белые» отступы вокруг измененного изображения)

Может кто-нибудь дать мне какие-либо советы о том, как это сделать с помощью GD/I mageMagick или любой подходящий PHP-скрипт/библиотека?

Я попытался следующие до сих пор ...

$gd = imagecreatefromjpeg('./assets/temp/whitespace-img.jpg'); 
    imagetrim($gd, '#ffffff', null); 

    function imagetrim($im, $bg, $pad=null, $output=null){ 

    // Calculate padding for each side. 
    if (isset($pad)){ 
     $pp = explode(' ', $pad); 
     if (isset($pp[3])){ 
      $p = array((int) $pp[0], (int) $pp[1], (int) $pp[2], (int) $pp[3]); 
     }else if (isset($pp[2])){ 
      $p = array((int) $pp[0], (int) $pp[1], (int) $pp[2], (int) $pp[1]); 
     }else if (isset($pp[1])){ 
      $p = array((int) $pp[0], (int) $pp[1], (int) $pp[0], (int) $pp[1]); 
     }else{ 
      $p = array_fill(0, 4, (int) $pp[0]); 
     } 
    }else{ 
     $p = array_fill(0, 4, 0); 
    } 

    // Get the image width and height. 
    $imw = imagesx($im); 
    $imh = imagesy($im); 

    // Set the X variables. 
    $xmin = $imw; 
    $xmax = 0; 

    // Start scanning for the edges. 
    for ($iy=0; $iy<$imh; $iy++){ 
     $first = true; 
     for ($ix=0; $ix<$imw; $ix++){ 
      $ndx = imagecolorat($im, $ix, $iy); 
      if ($ndx != $bg){ 
       if ($xmin > $ix){ $xmin = $ix; } 
       if ($xmax < $ix){ $xmax = $ix; } 
       if (!isset($ymin)){ $ymin = $iy; } 
       $ymax = $iy; 
       if ($first){ $ix = $xmax; $first = false; } 
      } 
     } 
    } 

    // The new width and height of the image. (not including padding) 
    $imw = 1+$xmax-$xmin; // Image width in pixels 
    $imh = 1+$ymax-$ymin; // Image height in pixels 

    // Make another image to place the trimmed version in. 
    $im2 = imagecreatetruecolor($imw+$p[1]+$p[3], $imh+$p[0]+$p[2]); 

    // Make the background of the new image the same as the background of the old one. 
    $bg2 = imagecolorallocate($im2, ($bg >> 16) & 0xFF, ($bg >> 8) & 0xFF, $bg & 0xFF); 
    imagefill($im2, 0, 0, $bg2); 

    // Copy it over to the new image. 
    imagecopy($im2, $im, $p[3], $p[0], $xmin, $ymin, $imw, $imh); 

    if ($output) 
    { 
     imagejpeg($im2, $output);   
    } 

    // To finish up, we replace the old image which is referenced. 
    $im = $im2; 
} 
+0

Что вы использовали в своих попытках? – Jon

+0

Я добавил, что моя попытка на этом .. Кажется, ничего не делает :( – Zabs

+0

изменил функцию, чтобы включить опцию для вывода ее в файл – Zabs

ответ

1

Этот сценарий Photoshop будет делать то, что вы хотите. Просьба иметь в виду, что функция обрезки работает только с нижним правым или верхним левым цветом пикселя. Это не сработает, если эта пограничная зона «загрязнена»

var srcDoc = app.activeDocument; 

//trim image to transparent width 
srcDoc.trim(TrimType.TOPLEFT, true, true, true, true); 

var w = srcDoc.width.value; 
var h = srcDoc.height.value; 

if (w<h) 
    { 
    var imageWidth = 380; 
    var imageHeight = Math.floor(w*(380/h)) 
    } 
else 
    { 
    var imageHeight = 380; 
    var imageWidth = Math.floor(h*(380/w)) 
    } 

var resizeRes = 72 
var resizeMethod = ResampleMethod.BICUBIC; 

//resize 
srcDoc.resizeImage(imageWidth, imageHeight, resizeRes, resizeMethod) 

// adjust canvas size 
srcDoc.resizeCanvas(400, 400, AnchorPosition.MIDDLECENTER); 
+0

Приветствия за это звездное усилие! Мне действительно удалось получить он работает в PHP-скрипте сейчас, но я собираюсь дать вам ответ, поскольку я, вероятно, предпочел бы попробовать ваш метод в следующий раз спасибо спасибо! – Zabs

+0

Закончено с использованием сценария выше inconjunction с этим, чтобы заставить его работать http://www.bin-co.com/php/scripts/classes/gd_image/#function-image-resize – Zabs

Смежные вопросы