JQuery — PHP пытается понять, как создать миниатюру из каталога

Это то, что у меня сейчас есть. Когда я включаю его в свой index.php и затем вызываю функцию при загрузке страницы, я получаю пустую страницу. Так что здесь что-то не так, но я не знаю что. Я чувствую, что я действительно близко, хотя. Я просто хочу создать миниатюры изображений в каталоге, а затем показать их в HTML в виде списка изображений, которые вы можете нажать, чтобы вызвать лайтбоксы.

Я все еще очень шаткий в PHP. Я пытаюсь обернуть голову вокруг редактирования изображений в каталоге.

<?php
function buildThumbGallery(){

$h = opendir('/Recent_Additions/'); //Open the current directory
while (false !== ($curDir = readdir($h))) {
if (!file_exists('/Recent_Additions/thumbs/')) {
$thumbDir = mkdir('/Recent_Additions/thumbs/', 0777, true);
}else{
$thumbDir = '/Recent_Additions/thumbs/';
}
$width = 200;
$height = 200;
foreach ($curDir as $image) {
$filePath = $curDir."/".$image;
$genThumbImg = $image->scaleImage($width, $height, true);
$newThumb = imagejpeg($genThumbImg, $thumbDir, 100);

echo '<li> <a class="fancybox" data-fancybox-group="'.basename($curDir).'" href="'.$filePath.'" title="'.basename($curDir)." ".strpbrk(basename($filePath, ".jpg"), '-').'"><img src="'.$newThumb.'"/>'.basename($curDir).'</a>';
imagedestroy($newThumb);
}echo '</li>';
}
?>

0

Решение

Вы делаете несколько вещей неправильно:

  • Вы не закрываете цикл while.
  • Readdir уже просматривает каталог, ваш foreach ничего не делает.
  • Вам не хватает кавычек в вашем эхо.
  • Вы вызываете метод scaleImage на строке, я думаю, что вы хотели вызвать функцию imagescale,

Вы упускаете и неправильно понимаете много вещей, посмотрите, как создать миниатюру здесь: https://stackoverflow.com/a/11376379/4193448
Также посмотрите, если вы можете включить ошибки PHP, получение пустой страницы, когда ваш код полон ошибок, на самом деле не помогает, не так ли?

1

Другие решения

::РЕДАКТИРОВАТЬ::

С помощью @swordbeta мой скрипт работает правильно. Вот код для дальнейшего использования:

<?php
function buildThumbGallery(){

$curDir = "./Recent_Additions/";
$thumbsPath = $curDir."thumbs/";

if (!file_exists($thumbsPath)) {
mkdir($thumbsPath, 0777, true);
}
foreach(scandir($curDir) as $image){
if ($image === '.' || $image === '..' || $image === 'thumbs') continue;
if(!file_exists($thumbsPath.basename($image, ".jpg")."_thumb.jpg")){
// Max vert or horiz resolution
$maxsize=200;

// create new Imagick object
$thumb = new Imagick($curDir.$image);  //'input_image_filename_and_location'

$thumb->setImageFormat('jpg');

// Resizes to whichever is larger, width or height
if($thumb->getImageHeight() <= $thumb->getImageWidth()){
// Resize image using the lanczos resampling algorithm based on width
$thumb->resizeImage($maxsize,0,Imagick::FILTER_LANCZOS,1);
}else{
// Resize image using the lanczos resampling algorithm based on height
$thumb->resizeImage(0,$maxsize,Imagick::FILTER_LANCZOS,1);
}

// Set to use jpeg compression
$thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
$thumb->setImageCompressionQuality(100);
// Strip out unneeded meta data
$thumb->stripImage();
// Writes resultant image to output directory
$thumb->writeImage($thumbsPath.basename($image, ".jpg")."_thumb.jpg");  //'output_image_filename_and_location'
// Destroys Imagick object, freeing allocated resources in the process
$thumb->destroy();
}else{
echo '<a class="fancybox" data-fancybox-group="'.basename($curDir).'" href="'.$curDir.basename($image, "_thumb.jpg").'" title="Recent Addition - '.basename($image, ".jpg").'"><img src="'.$thumbsPath.basename($image, ".jpg")."_thumb.jpg".'"/></a>';
echo '<figcaption>'.basename($image, ".jpg").'</figcaption>' . "<br/>";
}
}
}
?>

:: Оригинальная почта ::

Хорошо, после того, как я вернусь и проведу еще несколько исследований и предложений от @swordbeta, у меня есть кое-что, что работает. Моя единственная проблема сейчас заключается в том, что я не могу отобразить изображения в моем index.php. Позже я оформлю вывод в CSS, сейчас я просто хочу увидеть миниатюры, а потом встроить их в ссылки на лайтбоксы href:

<?php
function buildThumbGallery(){

$curDir = "./Recent_Additions/";
$thumbsPath = $curDir."/thumbs/";

if (!file_exists($thumbsPath)) {
mkdir($thumbsPath, 0777, true);
}

$width = 200;

foreach(scandir($curDir) as $image){
if ($image === '.' || $image === '..') continue;
if(file_exists($thumbsPath.basename($image)."_thumb.jpg")){
continue;
}else{
// Max vert or horiz resolution
$maxsize=200;

// create new Imagick object
$thumb = new Imagick($curDir.$image);  //'input_image_filename_and_location'

// Resizes to whichever is larger, width or height
if($thumb->getImageHeight() <= $thumb->getImageWidth()){
// Resize image using the lanczos resampling algorithm based on width
$thumb->resizeImage($maxsize,0,Imagick::FILTER_LANCZOS,1);
}else{
// Resize image using the lanczos resampling algorithm based on height
$thumb->resizeImage(0,$maxsize,Imagick::FILTER_LANCZOS,1);
}

// Set to use jpeg compression
$thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
$thumb->setImageCompressionQuality(100);
// Strip out unneeded meta data
$thumb->stripImage();
// Writes resultant image to output directory
$thumb->writeImage($thumbsPath.basename($image)."_thumb.jpg");  //'output_image_filename_and_location'
// Destroys Imagick object, freeing allocated resources in the process
$thumb->destroy();
}
}   echo '<img src="'.$thumbsPath.basename($image)."_thumb.jpg".'" />' . "<br/>";
}
?>

В данный момент выходные данные из эха ничего не показывают, но остальная часть сценария работает правильно (то есть генерирует миниатюрные изображения в каталоге thumbs).

Я предполагаю, что я не форматирую свое эхо должным образом. Этот скрипт называется в моем index.php как <?php buildThumbGallery(); ?> внутри в стиле <div> тег.

0

По вопросам рекламы [email protected]