如何解决如何通过文件名起作用并循环播放和裁剪图像?
| 我正在尝试裁剪图像列表。该列表存储在txt文件中。 我遍历txt文件并将img url存储到数组中Array ( [0] => img001.jpg [1] => img002.jpg [2] => img003.jpg [3] => img004.jpg )
.PHP,.txt和.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);
$tc = imagecolorallocate($img,0);
imagefilledrectangle($img,150,30,$bgc);
/* Output an errmsg */
imagestring($img,1,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,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,$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);
}
?>
解决方法
在图像处理功能顶部的某处,您可以看到以下行:
return $img;
这样一来,它总是从那里的函数返回,此后的代码永远不会到达。
只需删除该行即可使您走得更远。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。