2012-02-13 5 views
0

Я хочу, чтобы иметь возможность генерировать другое изображение (с водяным знаком), когда пользователь сохраняет изображение.Различные изображения при сохранении как

Я знаю, что:

  • Broswer отправить текст/HTML, когда это прямой доступ изображения и изображения/JPEG (изображение типа содержимого), когда он включен в SRC = ""

Так если браузер запрашивает сервер из src = "", он отправляет хороший контент-тип. Если броузер идет по URL-адресу изображения, он отправляет текст/html, application/html + xml и т. Д.

Кто-нибудь знает, как сделать водяной знак, если пользователь выполнит команду «Сохранить как»?

Благодаря

+1

«Любой, кто знает, как сделать водяной знак, если пользователь выполнит команду« Сохранить как », вы не можете. –

+0

Перейдите по http://9gag.com/ и попробуйте сохранить изображение, см. Водяной знак. Вы можете объяснить ? –

+1

@ DavidBllanger Они просто обрезают это с отрицательным отрывом. «Водяной знак» уже находится на изображении. – Gumbo

ответ

0

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

Таким образом, CSS скрывает белую рамку под рисунком, и когда кто-то использует «Сохранить как», это поле есть. На сервере не используется ressource.

Вот решение, основанное на заголовке браузера, который я разработал. Не работайте с «Сохранить как», но работайте для изображения с прямым доступом и src = «»

<?php 
    #... 

    # Require PHP to work as a module in apache 
    $SentHeaders = apache_request_headers(); 
    #$Watermark = strpos($SentHeaders['Accept'], 'text'); 
    $Watermark = preg_match_all('/text/', $SentHeaders['Accept'], $matches); 

    # Set the header 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', false); 
    header('Pragma: no-cache'); 

    # HHeader required 
    ($Image->ContentType) ? header('Content-Type: '.$Image->ContentType) : header('Location: /404'); 

    # Accès direct/save as 
    if($Watermark){ 
     # Direct Image Access 
     #... 
    } else { 
     # Image included in src="" 
     #... 
    } 
    #... 
    ?> 
Смежные вопросы