2015-08-29 4 views
1

Я использую PHP для размещения всех изображений в данной папке в слайд-шоу. Это прекрасно работает в следующем коде:Как получить подпись изображения с помощью php

<?php 
//get all image files with a .jpg extension. 
$images = glob("" . $directory . "*.jpg"); 

$imgs = array(); 
// create array 
foreach($images as $image){ $imgs[] = "$image"; } 

/****** Display Images ******/ 
foreach ($imgs as $img) { 
    //I would like to get the image title here, to put in the echo below  
    echo "<div><img src='$img' border='0' width=\"100%\" height=\"100%\"/ /></div>"; 
    } 
?> 

Это все идет довольно легко, но так как я теперь хотел бы также добавить названия картин, как подписи, мне нужно, чтобы извлечь/получить эту информацию из образа ,

Я думаю, что могу получить что-то по строкам функции exif_read_data, но я не совсем уверен, как получить название, а не все метаданные. , ,


С небольшой помощью от умных людей, использующих StackOverflow, это окончательный и функциональный результат, как показано в моем ответе ниже, а также и снова, сделанный с битами и кусками из нескольких ответов.

<?php 
/* 
This script will print the image files in a given folder, along with their image description (title in windows file explorer). 
*/ 

// Set the directory where the files reside 
$directory = $GLOBALS['directory']; 

//get all image files with a .jpg extension. 
$imagenpath = glob("" . $directory . "*.jpg"); 

$imgs = array(); 
// create array 
foreach($imagenpath as $image){ $imgs[] = "$image"; } 

// Print each image file with the ImageDescription (the title/caption) in the ALT field 
foreach ($imgs as $img) { 
    $exif_data = exif_read_data($img, 'IFD0'); 
    $exif_description = ""; 
    if (!empty($exif_data['ImageDescription'])) 
     $exif_description = $exif_data['ImageDescription']; 

    echo "<div><img src='$img' alt='$exif_description' border='0' width=\"100%\" height=\"100%\"/ /></div>"; 
} 
?> 
+1

Где название изображения, расположенные? Также 'foreach ($ images as $ image) {$ imgs [] =" $ image "; } 'кажется ненужным. – chris85

+0

Результаты, возвращаемые из 'exif_read_data', возвращаются из памяти в многомерном массиве, а детали в данных exif полностью зависят от того, что их создало, и независимо от того, были ли они вообще отредактированы или изменены. Вам нужно будет проанализировать массив, который будет возвращен, и cherrypick бит, который вы хотите/нуждаетесь – RamRaider

+0

Заголовок изображения находится в файле :) Я могу установить заголовок (комментарий и прочее), просто отредактировав файл jpg в окнах, но я не уверен, что это то, что вы имели в виду.Биты кода, такие как 'foreach ($ images as $ image) {$ imgs [] =" $ image "; } 'не требуется при использовании функции glob() напрямую? Я получил код, а не писал сам - на самом деле не много сделал PHP, а не с 10 лет. Я считаю, что данные заголовка должны быть в этом многомерном массиве где-то, но я не могу найти его ... –

ответ

1

вот все, что может быть сделано, потому что большинство фотографий не поддерживаются с помощью этой функции, хотя, вы делаете это неправильно, потому что ошибка, которую вы получаете, потому что файл не найден, то ошибка, которую вы получаете, когда файл найден и не поддерживается это:

Предупреждение: exif_read_data (file.png): файл не поддерживается в /путь/к/файлу/file.php на l ине х

и его, потому что вы одинарные кавычки переменной в

$exif_data = exif_read_data($img, 'IFD0'); 

код может быть меньше символов, это мое решение:

<?php 
/* 
This script will print the image files in a given folder, along with their image description (title in windows file explorer). 
*/ 

// Set the directory where the files reside 
$directory = $GLOBALS['directory']; 

//get all image files with a .jpg extension. 
$imgs = glob($directory . "*.jpg"); 

// Print each image file with the ImageDescription (the title/caption) in the ALT field 
foreach ($imgs as $img) { 
    $exif_data = exif_read_data($img, 'IFD0'); 
    if (!empty($exif_data['ImageDescription'])) 
     $exif_description = $exif_data['ImageDescription']; 

    echo "<div><img src=\"$img\" alt=\"$exif_description\" border=\"0\" width=\"100%\" height=\"100%\"/ /></div>"; 
} 
?> 
+0

Thanx mate - я пропустил это! –

+0

Это была в основном последняя часть головоломки, а другая информация над ней теперь работает! –

+0

добро пожаловать :), пожалуйста, пометьте его как ответ, чтобы он не появлялся в неотвеченном разделе. –

0

Попробуйте это: -

foreach (glob("*.jpg") as $filename) { 
    $name = basename($filename, '.jpg'); 
    echo "<div><img src='$filename' title='$name' alt='$name' border='0' width=\"100%\" height=\"100%\"/ /></div>"; 
} 
+0

Я получаю синтаксическую ошибку в первой строке. , , Не мог ли этот код получить что-то еще, кроме названия изображения? –

+0

Его работает отлично на моей стороне. В функции glob поместите путь для всех ваших изображений. exp: - images/*. jpg – Monty

+0

Когда я удаляю ';' завершение функции glob, вещь работает, за исключением того, что она не печатает заголовок, а скорее просто имя файла, например. '' testpic00 Название для этой конкретной картины на самом деле ** Название 1 ** BTW спасибо за попытку :) –

0

Чтобы решить эту проблему, я в основном использовал браузер файлов Windows, выбрал файл изображения и ввел текст в раздел комментариев к документу.
Затем я напечатал $exif_data, как было предложено выше @RamRaider, и выяснил, что этот текст заканчивается в файле ImageDescription.

Как только я прибил ошибки в моем скрипте, а также с помощью @Abdallah Samman, больше не было ничего!

Спасибо всем ...

следующие работы красиво:

<?php 
/* 
This script will print the image files in a given folder, along with their image description. 
*/ 

// Set the directory where the files reside 
$directory = $GLOBALS['directory']; 

//get all image files with a .jpg extension. 
$imagenpath = glob("" . $directory . "*.jpg"); 

$imgs = array(); 
// create array 
foreach($imagenpath as $image){ $imgs[] = "$image"; } 

// Print each image file with the ImageDescription (the caption) in the ALT field 
foreach ($imgs as $img) { 
    $exif_data = exif_read_data($img, 'IFD0'); 
    $exif_description = ""; 
    if (!empty($exif_data['ImageDescription'])) 
     $exif_description = $exif_data['ImageDescription']; 

    echo "<div><img src='$img' alt='$exif_description' border='0' width=\"100%\" height=\"100%\"/ /></div>"; 
} 
?> 

 Смежные вопросы

  • Нет связанных вопросов^_^