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

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

利用Python将PDF文件转换为PNG图片的代码示例

《利用Python将PDF文件转换为PNG图片的代码示例》在日常工作和开发中,我们经常需要处理各种文档格式,PDF作为一种通用且跨平台的文档格式,被广泛应用于合同、报告、电子书等场景,然而,有时我们需... 目录引言为什么选择 python 进行 PDF 转 PNG?Spire.PDF for Python

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动