这一次将所有图片都进行了一次加水印的处理,代码分享一下,做了一个操作就是先将水印加载到图片的底部,并且留下一个透明的影音。
上面的是原图,挺简单的,不过做得很烦。
还有这个LOGO,美工不行就是这样的,悲剧。
<?php
/**
* 将一张图片和水印进行融合
* @param resource $img 元素图片资源
* @param resource $water 水印资源
* @param float $point 水印高度最大百分比 0 - 100
* @param int $alpha 底部横条透明度 0 - 128
*/
function create_watermark_picture(&$img, $water, $point, $alpha){
$point /= 100; //还原百分比为浮点数
$w_w = imagesx($water);
$w_h = imagesy($water);
$i_w = imagesx($img);
$i_h = imagesy($img);
$height = $w_h;
if($w_h > $i_h * $point) //水印位置图片高度
$height = $i_h * $point;
$width = $height * $w_w / $w_h; //计算水印位置图片宽度
$color = imagecolorallocatealpha($img, 0, 0, 0, $alpha); //获取一个透明度为$alpha的颜色
imagefilledrectangle($img, 0, $i_h - $height, $i_w, $i_h, $color); //用颜色填充一个矩形框
imagecopyresampled($img, $water, ($i_w - $width) / 2, $i_h - $height, 0, 0, $width, $height, $w_w, $w_h); //复制水印到图片上去
}
/**
* 获取某一文件夹下的文件列表
* @param dir_path $path
* @return array
*/
function get_file_list($path){
$handler = opendir($path);
$rt = array();
if($handler){
while($file = readdir($handler)){
if($file == '.' || $file == '..')
continue;
if(is_file($path . "/" . $file))
$rt[] = $path . "/" . $file;
}
}
return $rt;
}
/**
* 获取图片的资源句柄
* @param $path file_path
* @return null|resource
*/
function get_image_resource($path){
if(is_file($path) && is_readable($path)){
$info = getimagesize($path);
$img = null;
if(isset($info[2])){
switch($info[2]) //取得水印图片的格式
{
case IMAGETYPE_GIF:
$img = imagecreatefromgif($path);
break;
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($path);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($path);
break;
case IMAGETYPE_WBMP:
case IMAGETYPE_BMP:
$img = imagecreatefromwbmp($path);
break;
return null;
}
}
return $img;
}
else{
return null;
}
}
/**
* 保存图片到原始路径
* @param $img image_resource
* @param $path file_path
*/
function save_image($img, $path){
if(!is_writable($path)){
echo "$path can't write<br>\n";
return;
}
if(is_file($path) && is_readable($path)){
$info = getimagesize($path);
if(isset($info[2])){
switch($info[2]) //取得水印图片的格式
{
case IMAGETYPE_GIF:
imagegif($img, $path);
break;
case IMAGETYPE_JPEG:
imagejpeg($img, $path);
break;
case IMAGETYPE_PNG:
imagepng($img, $path);
break;
case IMAGETYPE_WBMP:
case IMAGETYPE_BMP:
imagewbmp($img, $path);
break;
}
}
}
imagedestroy($img);
}
/**
* 开始执行
* @param $dir_path file_dir_path
* @param $water_path watermark_file_path
*/
function run($dir_path, $water_path){
$water = get_image_resource($water_path);
imagesavealpha($water,true);
foreach(get_file_list($dir_path) as $file){
$img = get_image_resource($file);
imagesavealpha($img,true);
if(!$img)
continue;
create_watermark_picture($img, $water, 3.5, 100);
save_image($img, $file);
echo $file, "<br>\n";
}
}
header("Content-Type: text/html; charset=utf-8");
set_time_limit(0);
run("F:/test", "image/watermark_php.png");
?>
/**
* 将一张图片和水印进行融合
* @param resource $img 元素图片资源
* @param resource $water 水印资源
* @param float $point 水印高度最大百分比 0 - 100
* @param int $alpha 底部横条透明度 0 - 128
*/
function create_watermark_picture(&$img, $water, $point, $alpha){
$point /= 100; //还原百分比为浮点数
$w_w = imagesx($water);
$w_h = imagesy($water);
$i_w = imagesx($img);
$i_h = imagesy($img);
$height = $w_h;
if($w_h > $i_h * $point) //水印位置图片高度
$height = $i_h * $point;
$width = $height * $w_w / $w_h; //计算水印位置图片宽度
$color = imagecolorallocatealpha($img, 0, 0, 0, $alpha); //获取一个透明度为$alpha的颜色
imagefilledrectangle($img, 0, $i_h - $height, $i_w, $i_h, $color); //用颜色填充一个矩形框
imagecopyresampled($img, $water, ($i_w - $width) / 2, $i_h - $height, 0, 0, $width, $height, $w_w, $w_h); //复制水印到图片上去
}
/**
* 获取某一文件夹下的文件列表
* @param dir_path $path
* @return array
*/
function get_file_list($path){
$handler = opendir($path);
$rt = array();
if($handler){
while($file = readdir($handler)){
if($file == '.' || $file == '..')
continue;
if(is_file($path . "/" . $file))
$rt[] = $path . "/" . $file;
}
}
return $rt;
}
/**
* 获取图片的资源句柄
* @param $path file_path
* @return null|resource
*/
function get_image_resource($path){
if(is_file($path) && is_readable($path)){
$info = getimagesize($path);
$img = null;
if(isset($info[2])){
switch($info[2]) //取得水印图片的格式
{
case IMAGETYPE_GIF:
$img = imagecreatefromgif($path);
break;
case IMAGETYPE_JPEG:
$img = imagecreatefromjpeg($path);
break;
case IMAGETYPE_PNG:
$img = imagecreatefrompng($path);
break;
case IMAGETYPE_WBMP:
case IMAGETYPE_BMP:
$img = imagecreatefromwbmp($path);
break;
return null;
}
}
return $img;
}
else{
return null;
}
}
/**
* 保存图片到原始路径
* @param $img image_resource
* @param $path file_path
*/
function save_image($img, $path){
if(!is_writable($path)){
echo "$path can't write<br>\n";
return;
}
if(is_file($path) && is_readable($path)){
$info = getimagesize($path);
if(isset($info[2])){
switch($info[2]) //取得水印图片的格式
{
case IMAGETYPE_GIF:
imagegif($img, $path);
break;
case IMAGETYPE_JPEG:
imagejpeg($img, $path);
break;
case IMAGETYPE_PNG:
imagepng($img, $path);
break;
case IMAGETYPE_WBMP:
case IMAGETYPE_BMP:
imagewbmp($img, $path);
break;
}
}
}
imagedestroy($img);
}
/**
* 开始执行
* @param $dir_path file_dir_path
* @param $water_path watermark_file_path
*/
function run($dir_path, $water_path){
$water = get_image_resource($water_path);
imagesavealpha($water,true);
foreach(get_file_list($dir_path) as $file){
$img = get_image_resource($file);
imagesavealpha($img,true);
if(!$img)
continue;
create_watermark_picture($img, $water, 3.5, 100);
save_image($img, $file);
echo $file, "<br>\n";
}
}
header("Content-Type: text/html; charset=utf-8");
set_time_limit(0);
run("F:/test", "image/watermark_php.png");
?>
代码高亮用的是哪款插件啊 还是自己做的啊?
CodeColorer,自己写这插件挺费事的,这个插件集成度不错,主要是在页面显示的html