0

ディレクトリからファイルを取得して圧縮し、Web ページに表示しようとしています。ファイルはデジタル カメラから (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); 
?>

独自のページで、1 つの画像のみを表示できます。

<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 - 画像のサイズを変更します (ディレクトリで 2 回以上実行しないでください。そうしないと、サムの量が 2 倍になります!)

// 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. $出力

行で使用$outputexec()ますが、その変数を埋めることはありません。convert変換したファイルを配置するファイル名が含まれている必要があります。

3. デバッグ

デバッグのために、フィードしたコマンドを出力することもできますexec():

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