АЛЬТЕРНАТИВНЫЙ текст для изображений в HTML


Мы работаем над веб-сайтом, на котором есть множество изображений, и одним из требований является наличие альтернативного текста для каждого изображения (JPG, JPEG, PNG, GIF и т.д.). Поэтому всякий раз, когда отображается HTML и изображение, альтернативный текст для этого изображения также записывается в HTML вместе с IMG SRC.

После нашего обсуждения с разработчиками появились следующие решения

1) Создайте новую таблицу для хранения всех этих имен изображений. Затем каждый раз, когда используется изображение, выполняется поиск в базе данных и соответствующий альтернативный текст добавлен.

2) Другое решение - записать некоторую информацию EXIF в каждый файл, и каждый раз, когда они используются, информация EXIF файла считывается и добавляется в HTML по мере необходимости.

Любые предложения о том, как действовать дальше. Изображений очень много, поэтому мы ищем лучшее решение с наименьшей нагрузкой на сервер и временем загрузки.

Дополнительная информация - Мы запускаем PHP на нашем сервере для выбора изображений и т.д.

Спасибо

Author: inspite, 2009-07-23

11 answers

Я бы исключил EXIF, так как он не поддерживает PNG и GIF.

Поиск в бд звучит нормально (для меня) и будет масштабироваться нормально (если вы сделали это умно). Например, вы должны постараться максимально сократить количество поисковых запросов.

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

 3
Author: inspite, 2009-07-23 15:18:24

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

 2
Author: Virat Kadaru, 2009-07-23 15:17:48

Если вы не хотите давать изображениям альтернативный текст, это должно быть что-то, что работает правильно, если изображения там нет.

Я не должен быть "альтернативным текстом изображения" или "image.jpg ". Скорее это должно быть что-то вроде"Stackoverflow.com у него много вопросов и ответов". при показе скриншота SO. Но если ваше изображение не может содержать значимый альтернативный текст, просто сделайте alt="" и двигайтесь дальше, иногда просто лучше не давать альтернативного текста, чем давать плохой альтернативный текст.

Из-за этого вы должны хранить альтернативный текст для каждого изображения, которое что-то означает , а не помещать бессмысленный альтернативный текст (исключая информацию EXIF).

 2
Author: Esteban Küber, 2009-07-23 15:41:07

Если вы можете работать с тегами alt, соответствующими имени файла, вы можете использовать некоторый javascript, чтобы получить все изображения и добавить тег alt на основе имени файла.

Что-то вроде этого:

    //get all the img tags
    var images = document.getElementsByTagName('img');    
    for (i=0;i<images.length;i++)
    {
      //get the filename from the src
      filename = images[i].src.substring(images[i].src.lastIndexOf('/')+1,images[i].src.lastIndexOf('.'));
      //do any formatting here
      filename = filename.replace('_',' ');
      //set alt/title tags
      images[i].setAttribute('alt', filename);
      images[i].setAttribute('title', filename);
    }
 1
Author: hansolosuperstar, 2009-07-23 15:55:52

Я бы избегал варианта 2, потому что, если вы хотите обновить альтернативный текст, вам нужно будет каждый раз записывать в файл изображения, также, если вы хотите обработать изображения, например. создавайте эскизы, метаданные могут быть потеряны.

Вариант 1 кажется наиболее логичным, и если вы запрашиваете имена файлов из базы данных, просто одновременно получите альтернативный текст.

 0
Author: Andrew Mason, 2009-07-23 15:19:48

Возможно, третий вариант:

  • сохранить альтернативный текст в имени файла:)
 0
Author: hegemon, 2009-07-23 15:23:09

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

Короче говоря, перейдите по маршруту базы данных, если вы уже используете базу данных.

 0
Author: bluebrother, 2009-07-23 15:23:43

Я бы предложил вариант базы данных, потому что опция EXIF станет проблемой, если каким-то образом изображение придется переключать с другим изображением (передача данных EXIF не является тривиальной), плюс анализ большого количества файлов изображений по каждому запросу будет очень ресурсоемким.

Но будь то с базой данных или опцией EXIF, я бы настоятельно рекомендовал вам создать php-файл, действующий как кэш, с ассоциативным массивом имя_имя_изображения => alt_text, потому что вам не нужно 30 sql запросы на каждой загружаемой странице. Файл php будет включен в качестве начальной загрузки, поэтому каждый скрипт будет иметь доступ к ассоциативному массиву, например, через глобальную переменную.

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

 0
Author: FWH, 2009-07-23 15:23:59

Честный вопрос: вам действительно нужно создавать новую таблицу? Если вы все равно используете механизм загрузки PHP, не могли бы вы просто добавить новое поле в базу данных и добавить альтернативный текст, а затем связать его как переменную по мере необходимости? PHP будет очень простым оттуда. Просто мысль!

 0
Author: David Archer, 2009-07-23 15:26:11

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

 0
Author: Gert, 2009-07-23 15:30:45

Когда вы говорите "много изображений", о скольких мы говорим? Сотни или тысячи?

Если вас сотни, я бы просто создал PHP-файл с массивом пары ImagePath/ALTTEXT. Затем включите этот PHP-файл везде, где вы ссылаетесь на изображение. Чтобы абстрагироваться от реализации, в файле PHP есть метод, возвращающий altText с учетом полного пути к изображению.


$texthash = array(
  "/some/path/imageName.png" => "some alt text"
, "/some/path/imageName2.png" => "some other alt text"
);

function get_alt_text($imgpath) {
  return $texthash($imgpath);
}

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

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

Также убедитесь, что вы используете HTML-экранирование alt текст, прежде чем использовать его в HTML.

 0
Author: vh., 2009-07-23 17:31:29