用户操作
[即时聊天] [发私信] [加为好友]
施海勇ID:shysky
27996次访问,排名4222好友0人,关注者1
shysky的文章
原创 40 篇
翻译 1 篇
转载 1 篇
评论 18 篇
最近评论
frankres:谢谢高手
THANKS:THANKS!
xyr0088:真是难找,终于找到了!THANKS!
xyr0088:真是难找,终于找到了!THANKS!
happytkj:3Q
文章分类
收藏
相册
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 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来添加头/尾文件,提供个人主页服务的跳转之前输出的东西应该也是用类似的技术实现的吧

发表于 @ 2005年01月07日 00:55:00|评论(loading...)|编辑

新一篇: 巧用历史记录画笔给美女去斑  | 旧一篇: 网页标准在实践中所碰到的小问题

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © shysky