douzhuanqian8244 2011-06-13 20:05 采纳率: 100%
浏览 16
已采纳

如何将文件名传递给函数并循环并裁剪图像?

I'm trying to crop a list of images. The list is stored in a txt file.

I run through the txt file and store the img urls into an array

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

The .php, .txt, and .jpg images are all in the same folder and there a IMG2 subfolder.

I'm running this locally.

I was getting an error loading file, but now I just get a blank screen.

Can someone help me make this loop through the files in an array crop them. I realize that in the example below i'm just sending one value from $lines[1], thats because I can't even get that to work.

Once that works then adding a FOR loop should be straight forward.

Thanks

    <?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条回答 默认 最新

  • douqian4411 2011-06-13 20:18
    关注

    Somewhere at the top of your image processing function, you have the line:

    return $img;
    

    So that´s as far as it gets, it always returns from the function from there, the code after that is never reached.

    Just removing that line should get you a lot further.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?