1

php filemtime を使用して、アルバムに追加された最新の画像 (フォルダー) を検索し、Imagick で親指を立てようとしています。

最新のフォルダーを見つけるスクリプトのその部分が実際に機能し、Imagick の部分も機能することを私は知っています。この2つを組み合わせるのが問題です。ここにはもっと頭のいい人がたくさんいます。

スクリプトは次のようになります。

<?php

/* paths to the images */
$directory  = '../i/albums';
$fdirectory = opendir("$directory");
while (false !== ($file       = readdir($fdirectory))) {
    if (($file != ".") && ($file != ".." ) && ($file != "index.php~" ) && ($file != "index.php" )) {

        $files[$file] = filemtime("$directory/$file");
    }
}
closedir($fdirectory);
clearstatcache();
arsort($files);
$i            = 0;
while ((list($key1, $val) = each($files)) && ($i <= 0))
    $newdirectory = $directory . '/' . $key1 . '/thumbs/'; /* Problem is probably here */
/* Making thumbnail starts here */
/* The object used as a canvas */
$canvas       = new imagick('../images/wood_grain_3030646.jpg');
$canvas->adaptiveResizeImage(250, 250);
$canvas->setImageFormat("png");
/* Create an empty ImagickDraw object
  (Use the defaults for the polaroid) */
$bg           = new ImagickDraw();
/* Create a few random images */
/* Imagick seems not to like  $newdirectory here */
$images       = new Imagick(glob("" . $newdirectory . "{*.jpg,*.gif,*.png}", GLOB_BRACE));
/* Loop trough images, overlay on canvas and remove the image */
foreach ($images as $key => $imag) {
    /* Thumbnail to 100x width and set background to black.
      It looks like an drop-in shadow */
    $imag->thumbnailImage(100, null);
    $imag->setImageBackgroundColor(new ImagickPixel("black"));
    /* Use a random angle */
    $angle = mt_rand(1, 45);
    if (mt_rand(1, 2) % 2 === 0) {
        $angle  = $angle * -1;
    }
    /* Create the polaroid */
    $imag->polaroidImage($bg, $angle);
    /* Composite the polaroid over the canvas */
    /* Composite to a random location */
    $canvas->compositeImage($imag, Imagick::COMPOSITE_OVER, mt_rand(10, 150), mt_rand(10, 150));
    /* Round the corners. (yes, this is all that is needed.) */
    $canvas->roundCorners(10, 10);
    /* Clone the current object */
    $shadow = $canvas->clone();
    /* Set image background color to black
      (this is the color of the shadow) */
    $shadow->setImageBackgroundColor(new ImagickPixel('black'));
    /* Create the shadow */
    $shadow->shadowImage(80, 3, 5, 5);
    /* Imagick::shadowImage only creates the shadow.
      That is why the original image is composited over it */
    $shadow->compositeImage($canvas, Imagick::COMPOSITE_OVER, 0, 0);
    /* Free some resources */
    $imag->removeImage();
    /* Add some contrast */
    $shadow->contrastImage(20);

    $shadow->writeImages("../images/polaroids/polaroids_thumb.png", true);
}
/* Display the results */
header("Content-Type: image/png");
echo $shadow;
?>

Imagick の部分を個別にテストしましたが、静的フォルダーに使用すると実際に機能します。

4

0 に答える 0