Мы используем PHP-скрипт (watermark.php) для изменения изображения на лету:
$image = imagecreatefromstring(file_get_contents('../'.$_GET['url']));
$w = imagesx($image);
$h = imagesy($image);
// Load the watermark
$watermark = imagecreatefrompng('../imgs/bgs/watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);
// Insert watermark to the right bottom corner
imagecopy($image, $watermark, $w-$ww-15, $h-$wh-5, 0, 0, $ww, $wh);
// Send the image
header('Content-type: image/jpeg');
imagejpeg($image,null,95);
Это помещено в тег привязки, готовый для использования fancybox:
<a class="fancybox-buttons" data-fancybox-group="gallery" href="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg">
<img src="imgs/btns/blanco.png">
</a>
Затем Fancybox использует тег привязки, чтобы создать его для лайтбокса:
<img class="fancybox-image" src="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" style="display: inline;">
Если пользователь хочет сохранить изображение лайтбокса, щелкнув по нему правой кнопкой мыши, он / она получает в качестве имени файла watermark.php для сохранения.
Как получить имя файла для отображения как SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg, а не watermark.php ??
Мы попытались взломать код fancybox, чтобы вывести это:
<img class="fancybox-image" src="scripts/watermark.php?url=SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" download="SOME-IMG-TO-CHANGE-ON-THE-FLY.jpg" style="display: inline;">
но пока не повезло. Любые идеи, как лучше взломать код fancybox или другие предложения о том, как решить эту проблему?
Версия Fancybox версии: 3.0.0 Beta 1 (вт, 29 января 2013 г.)
Спасибо!
Вам необходимо включить заголовок размещения контента:
header("Content-disposition: attachment; filename='foo.jpg'");
<img>
тег покажет /script.php?id=47
, но когда кто-то пытается сохранить как изображение, браузер будет использовать имя файла, указанное в заголовке расположения (foo.jpg
).
Других решений пока нет …