Как передать имя файла в функцию и циклически проходить и обрезать изображения? - PullRequest
0 голосов
/ 14 июня 2011

Я пытаюсь обрезать список изображений.Список хранится в txt-файле.

Я запускаю txt-файл и сохраняю URL-адреса img в массив

Array ( [0] => img001.jpg [1] => img002.jpg [2] => img003.jpg [3] => img004.jpg ) 

.все в той же папке и там подпапка IMG2.

Я запускаю это локально.

Я получаю ошибку при загрузке файла, но теперь у меня просто пустой экран.

Может кто-нибудь помочь мне сделать этот цикл по файлам в массиве обрезать их.Я понимаю, что в приведенном ниже примере я просто отправляю одно значение из $ lines [1], потому что я даже не могу заставить это работать.

Как только это сработает, добавление цикла FOR должно быть прямым.

Спасибо

    <?PHP
error_reporting(E_ALL);
ini_set('display_errors', '1');

$fd = fopen ("files.txt", "r");
while (!feof ($fd))
{
   $buffer = fgets($fd, 4096);
   $lines[] = $buffer;
}
fclose ($fd); 

print_r($lines);

$imgurl = $lines[1]; 

processImage($imgurl);  //or below line doesn't work
//foreach ($lines as $imgurl) processImage(trim($imgurl));

Function processImage($imgurl) {
    //load the image

    $img = @imagecreatefromjpeg($imgurl);

    if (!$img) { /* See if it failed */
        $img  = imagecreatetruecolor(150, 30); /* Create a black image */
        $bgc = imagecolorallocate($img, 255, 255, 255);
        $tc  = imagecolorallocate($img, 0, 0, 0);
        imagefilledrectangle($img, 0, 0, 150, 30, $bgc);
        /* Output an errmsg */
        imagestring($img, 1, 5, 5, "Error loading $imgurl", $tc);
    }
    return $img;

    $b_top = 0;
    $b_btm = 0;
    $b_lft = 0;
    $b_rt = 0;

    //top
    for(; $b_top < imagesy($img); ++$b_top) {
      for($x = 0; $x < imagesx($img); ++$x) {
        if(imagecolorat($img, $x, $b_top) != 0xFFFFFF) {
           break 2; //out of the 'top' loop
        }
      }
    }

    //bottom
    for(; $b_btm < imagesy($img); ++$b_btm) {
      for($x = 0; $x < imagesx($img); ++$x) {
        if(imagecolorat($img, $x, imagesy($img) - $b_btm-1) != 0xFFFFFF) {
           break 2; //out of the 'bottom' loop
        }
      }
    }

    //left
    for(; $b_lft < imagesx($img); ++$b_lft) {
      for($y = 0; $y < imagesy($img); ++$y) {
        if(imagecolorat($img, $b_lft, $y) != 0xFFFFFF) {
           break 2; //out of the 'left' loop
        }
      }
    }

    //right
    for(; $b_rt < imagesx($img); ++$b_rt) {
      for($y = 0; $y < imagesy($img); ++$y) {
        if(imagecolorat($img, imagesx($img) - $b_rt-1, $y) != 0xFFFFFF) {
           break 2; //out of the 'right' loop
        }
      }
    }

    //copy the contents, excluding the border
    $newimg = imagecreatetruecolor(imagesx($img)-($b_lft+$b_rt), imagesy($img)-($b_top+$b_btm));

    imagecopy($newimg, $img, 0, 0, $b_lft, $b_top, imagesx($newimg), imagesy($newimg));

    //finally, output the image
    header("Content-Type: image/jpeg");
    imagejpeg($newimg);

    // Save the image
    $newname = "t_".$imgurl;
    imagejpeg($newimg, $newname);

    // Free up memory   
    imagedestroy($newimg);
    imagedestroy($img);


}

?>

1 Ответ

2 голосов
/ 14 июня 2011

Где-то в верхней части функции обработки изображений у вас есть строка:

return $img;

Так что, насколько это возможно, он всегда возвращается от функции оттуда, код посленикогда не достигается.

Простое удаление этой строки должно продвинуть вас намного дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...