HTACCESS 配合 PHP 给图片加上水印

2023-12-14 03:32

本文主要是介绍HTACCESS 配合 PHP 给图片加上水印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用apache的.htaccess、php做wrapper来给图片加上水印
首先在要加水印图片的目录,例如/var/www/html/pic目录下写一个.htacess文件

AddHandler watermarked .jpg
AddHandler watermarked .jpeg
AddHandler watermarked .gif
AddHandler watermarked .png
Action watermarked /watermark/wrapper.php
这样将所有jpg/gif/png文件请求forward到/watermark/wrapper.php。由于用到了AddHandle,需要在apache的配置文件httpd.conf里相应目录的AllowOverride一项,允许FileInfo,例如
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride FileInfo
Order allow,deny
Allow from all
</Directory>
然后在/var/www/html下建立watermark目录,写wrapper.php,内容如下

<?php

$watermark
= "watermark.png";
$image = $_SERVER["PATH_TRANSLATED"];

if (empty(
$image)) die();

if (!
file_exists($image)) {
   
header("404 Not Found");
   echo
"File Not Found."; die();
}

$outputType = getFileType($image);

watermark($image, $watermark, $outputType);

/**
   Outputs the image $source with $watermark in the lower right corner.
   @param $source the source image
   @param $watermark the watermark to apply
   @param $outputType the type to output as (png, jpg, gif, etc.)
                      defaults to the image type of $source if left blank
*/
function watermark($source, $watermark, $outputType="") {
   
$sourceType = getFileType($source);
   
$watermarkType = getFileType($watermark);

   if (empty(
$outputType)) $outputType = $sourceType;
   if (
$outputType == "gif") $outputType = "png"; // Okay to remove after July 2004
   
header("Content-type:image/$outputType");

   
// We're only looking at the file name, not the directory name
   
$fileName = basename($source);

   
// Match dots "."
   
preg_match_all("/(.)/", $fileName, $dots);

   
// We only care about match #1
   
$dots = $dots[1];

   if (
count($dots) > 1) {
      
// More than one dot, so don't do watermarking

      
$fp = fopen($source, "rb");
      
$contents = fread($fp, filesize($source));
      
fclose($fp);
      echo
$contents;
   }

   else {

      
// Continue with watermarking

      // Derive function names
      
$createSource = "ImageCreateFrom".strtoupper($sourceType);
      
$showImage = "Image".strtoupper($outputType);
      
$createWatermark = "ImageCreateFrom".strtoupper($watermarkType);

      
// Load original and watermark to memory
      
$output = $createSource($source);
      
$logo = $createWatermark($watermark);
      
ImageAlphaBlending($output, true);

      
// Find proper coordinates so watermark will be in the lower right corner
      
$x = ImageSX($output) - ImageSX($logo);
      
$y = ImageSY($output) - ImageSY($logo);

      
// Display
      
ImageCopy($output, $logo, $x, $y, 0, 0, ImageSX($logo), ImageSY($logo));
      
$showImage($output);

      
// Purge
      
ImageDestroy($output);
      
ImageDestroy($logo);
   }
}

function
getFileType($string) {
   
$type = strtolower(eregi_replace("^(.*).","",$string));
   if (
$type == "jpg") $type = "jpeg";
   return
$type;
}
?>
要加上去的图片 watermark.png也放在该目录下,也可以在别的目录,但是需要修改$watermark这个变量。然后用浏览器访问pic下的一个图片看看是不是加上了水印:),缺省是加在右下角,要改成别的方式得改改这个php文件。
这样原图可以没有水印的,只是在被请求的时候再加上水印,另外可以再wrapper.php进行一些判断,比如判断HTTP referer (php的变量是$_SERVER["HTTP_REFERER"])看请求是否来自本服务器。
参考连接:http://www.webpronews.com/webdevelopment/basicdevelopment/wpn-37-20040429HTACCESSWrapperswithPHP.html
这个里面还讲到用.htaccess和php来添加头/尾文件,提供个人主页服务的跳转之前输出的东西应该也是用类似的技术实现的吧

这篇关于HTACCESS 配合 PHP 给图片加上水印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490988

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Apache伪静态(Rewrite).htaccess文件详解与配置技巧

《Apache伪静态(Rewrite).htaccess文件详解与配置技巧》Apache伪静态(Rewrite).htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令,主要的... 一、.htAccess的基本作用.htaccess是一个纯文本文件,它里面存放着Apache服务器