Показать пользовательское изображение для некоторых изображений, если изображение не найдено - Lighttpd

У меня есть сайт, который создает изображения для некоторого контента после его создания. Я пытаюсь понять, что делать между созданием контента и созданием изображения. Я думаю, что я мог бы установить пользовательское изображение для отображения при ошибке 404 на исходном изображении. Однако я не уверен, как это сделать с lighttpd. Есть идеи или альтернативы?

РЕДАКТИРОВАТЬ: проблема в том, что пользователь не создает контент, он создается процессом. По сути, мы добавляем элементы в каталог и хотим создать стандартизированное изображение каталога из изображения, предоставленного поставщиком продукта. Однако я не хочу, чтобы медленный сервер на стороне поставщика замедлял добавление новых продуктов. Таким образом, выполняется отдельный процесс, который создает образ позже, если он доступен. Я думаю, что я мог бы заставить систему создать образ по умолчанию, когда мы создаем продукт, а затем перезаписать его позже, когда мы создадим образ из образа, предоставленного поставщиком.


person Tracy Hurley    schedule 30.10.2008    source источник


Ответы (5)


Используйте тег <object> в HTML с откатом к изображению по умолчанию.

<P>                 <!-- First, try the Python applet -->
<OBJECT title="The Earth as seen from space" 
        classid="http://www.observer.mars/TheEarth.py">
                    <!-- Else, try the MPEG video -->
  <OBJECT data="TheEarth.mpeg" type="application/mpeg">
                    <!-- Else, try the GIF image -->
    <OBJECT data="TheEarth.gif" type="image/gif">
                    <!-- Else render the text -->
     The <STRONG>Earth</STRONG> as seen from space.
    </OBJECT>
  </OBJECT>
</OBJECT>
</P>

(пример с сайта w3.org)

person Jasper Bekkers    schedule 30.10.2008

Другой альтернативой на стороне клиента является:

<img src="/images/generated_image_xyz.png" 
    onerror="this.src='/images/default_image.png'; this.title='Loading...';" />
person EoghanM    schedule 02.12.2008

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

Вы можете отобразить загружаемое изображение и использовать AJAX для преобразования этого узла DOM в настоящее изображение, когда оно будет создано. Вы можете написать его с нуля или использовать любую из известных и стабильных библиотек AJAX, если у вас нет собственных предпочтений, взгляните на jQuery.

person Community    schedule 30.10.2008

В дополнение к @kentlarsson - если вы хотите сделать это через Javascript, я недавно нашел этот код: http://jquery.com/plugins/project/Preload и демо на http://demos.flesler.com/jquery/preload/placeholder/, который делает то, что он предлагает — с опцией «notFound».

Я недостаточно знаю о lighttpd, чтобы рассказать вам о настройке пользовательского образа с одним или несколькими подкаталогами на сайте.

person Alister Bulman    schedule 30.10.2008

Я думаю, вы могли бы решить это только на стороне клиента.

Основываясь на ответе Джасперса, вы можете сделать:

<OBJECT data="/images/generated_image_xyz.png" type="image/png">
     Loading..<blink>.</blink>
</OBJECT>

Также можно наслаивать фоны с помощью CSS:

<style type="text/css">
    .content_image { width:100px; height: 100px; 
        background: transparent url('/images/default_image.png') no-repeat }
    .content_image div { width:100px; height: 100px; }
</style>

<div class="content_image">
     <div style="background: 
         transparent url('/images/generated_image_xyz.png') no-repeat" />
</div>

Последнее решение предполагает, что у вас нет прозрачности в сгенерированном изображении.

person EoghanM    schedule 20.11.2008