0

我正在尝试从目录中提取文件,压缩它们,然后将它们显示在我的网页上。这些文件是从我的数码相机直接上传的(当我通过我的 iPad 旅行时),所以我无法在我的电脑上缩小它们。

无论如何,经过数小时的搜寻,我终生无法让它工作。

<?php

echo "<BR><BR>";
$dir = opendir('images/day1/'); 
while ($read = readdir($dir)) 
{

if ($read!='.' && $read!='..') 
{ 
echo $read;
exec( 'convert $read -quality 50 $output' );
echo "<BR>";
echo '<a href="images/day1/'.$read.'" TARGET="_BLANK"><img src="'.$output.'" WIDTH="800"></a>'; 
echo '<BR><BR>';
}

}

closedir($dir); 
?>

欢迎任何和所有建议....我根本无法让转换工作(分配较低的质量然后显示 $output.

提前致谢

4

2 回答 2

1
<?php 
$photo="sunflower.jpg"; 

$cmd = "convert $photo -quality 50 JPG:-"; 

header("Content-type: image/jpeg"); 
passthru($cmd, $retval); 
?>

在自己的页面上,只能查看一个图像,或者您可以拥有一个

<img src="php_page_containing_above_code.php?photo=sunflower.jpg">

并有更多的图像。注释掉代码顶部的 $photo 变量,我现在不记得确切的代码并且正在工作,所以无法测试它。我认为你不需要 $photo = $_GET['photo']; 但又不记得了,因为我不使用这种方法。


当 OP 说第一部分不起作用时添加的代码示例。

将此保存为 image.php

<?php 
$photo = $_REQUEST['photo'];
$cmd = "convert $photo -quality 50 JPG:-"; 
header("Content-type: image/jpeg"); 
passthru($cmd, $retval); 
?>

将此保存为您想要的任何内容并运行:

<?php
// Directory to read images from
$dir = "background/";

// Read the directory and sellect EVERYTHING
$filenames = glob( "$dir*" );

// Start the loop to display the images
foreach ( $filenames as $filename ) {

// Display the images
echo "<img src=\"image.php?photo=".$filename."\" />\n";
}
?>

替代代码:

文件 1 - 调整图像大小(不要在目录上运行超过一次,否则您的拇指数量会翻倍!)

// Read the directory and sellect jpg only
$filenames = glob("$dir*.{jpg,JPG}", GLOB_BRACE);

// Start the loop to resize the images
foreach ( $filenames as $filename ) {

// New name 
$name = explode ( '/', $filename );
$newname = $name[0]."/th_".$name[1];

//Resize and save in the same directory
//exec("convert $filename -resize 400x400 -quality 50 $newname");
}

?>

文件 2 - 显示图像

// Read all the image files into an array that start with th_
$filenames = glob("$dir/th_*.{jpg,JPG}", GLOB_BRACE);

// Display the array contents
foreach ( $filenames as $value ){ echo "<img src=\"$value\"><br>"; }

?>

于 2013-02-22T08:14:44.227 回答
0

1. 行情

您在此行中使用单引号:

exec( 'convert $read -quality 50 $output' );

这是行不通的,因为变量$read$output不会在单引号字符串中展开。

您可以使用以下任一解决方案:

exec( "convert $read -quality 50 $output" ); // double quote string, expands variables
exec( 'convert ' . $read . ' -quality 50 ' . $output ); // single quoted string with concatenated variables

2. $输出

$output在该exec()行中使用,但您从不填充该变量。它应该包含您要convert放置转换文件的文件名。

3. 调试

对于调试,您还可以输出您输入的命令exec()

$cmd = "convert $read -quality 50 $output";
echo $cmd;
exec($cmd);
于 2013-02-22T09:31:22.810 回答