ホームページ バックエンド開発 PHPチュートリアル php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码_PHP

php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码_PHP

Jun 01, 2016 pm 12:18 PM
gd2 php

复制代码 代码如下:
//上传文件类型列表
$uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);
$max_file_size = 200000; //上传文件大小限制, 单位BYTE
$path_im = "prod_img/"; //生成大图保存文件夹路径
$path_sim = "prod_simg/"; //缩略图保存文件夹路径
$watermark = 1; //是否加水印(1为加水印,其他为不加水印);
$watertype = 1; //水印类型(1为文字,2为图片)
$waterstring = "[url=http://www.jy17.com/]http://www.jy17.com/[/url]"; //水印字符串
$waterimg = "water.png"; //水印图片文件路径
$waterclearly = 100; //水印透明度0-100,数字小透明高
$imclearly = 100; //图片清晰度0-100,数字越大越清晰,文件尺寸越大
$simclearly = 75; //缩略图清晰度0-100,数字越大越清晰,文件尺寸越大
$smallmark = 1; //是否生成缩略图(1为加生成,其他为不);
$dst_sw = 80; //定义缩略图宽度,高度我采用等比例缩放,所以只要比较宽度就可以了
?>

上传文件:



允许上传的文件类型为:=implode(',',$uptypes)?>

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
//是否存在文件
{
echo "图片不存在!";
exit;
}
$file = $_FILES["upfile"];
if($max_file_size //检查文件大小
{ $max_file_size = $max_file_size/1000;
echo "文件太大,超过 ".$max_file_size." KB!";
exit;
}
if(!in_array($file["type"],$uptypes))
//检查文件类型
{
echo "文件类型不符!".$file["type"];
exit;
}
if(!file_exists($path_im))
//检查上传目录是否存在,不存在创建
{
mkdir($path_im);
}
if(!file_exists($path_sim))
//检查缩略图目录是否存在,不存在创建
{
mkdir($path_sim);
}
$filename = $file["tmp_name"];
$im_size = getimagesize($filename);
$src_w = $im_size[0];
$src_h = $im_size[1];
$src_type = $im_size[2];
$pinfo = pathinfo($file["name"]);
$filetype = $pinfo['extension'];
$all_path = $path_im.time().".".$filetype; //路径+文件名,目前以上传时间命名
if (file_exists($all_path))
{
echo "同名文件已经存在了";
exit;
}
if(!move_uploaded_file ($filename,$all_path))
{
echo "移动文件出错";
exit;
}
$pinfo = pathinfo($all_path);
$fname = $pinfo[basename];
echo "已经成功上传
文件名: ".$all_path."
";
echo "宽度:".$src_w."px ";
echo "长度:".$src_h."px ";
echo "
大小:".$file["size"]." bytes";
switch($src_type)//判断源图片文件类型
{
case 1://gif
$src_im = imagecreatefromgif($all_path);//从源图片文件取得图像
break;
case 2://jpg
$src_im = imagecreatefromjpeg($all_path);
break;
case 3://png
$src_im = imagecreatefrompng($all_path);
break;
//case 6:
//$src_im=imagecreatefromwbmp($all_path);
//break;
default:
die("不支持的文件类型");
exit;
}
if($watermark == 1)
{
//$iinfo = getimagesize($all_path,$iinfo);
$dst_im = imagecreatetruecolor($src_w,$src_h);
//根据原图尺寸创建一个相同大小的真彩色位图
$white = imagecolorallocate($dst_im,255,255,255);//白
//给新图填充背景色
$black = imagecolorallocate($dst_im,0,0,0);//黑
$red = imagecolorallocate($dst_im,255,0,0);//红
$orange = imagecolorallocate($dst_im,255,85,0);//橙
imagefill($dst_im,0,0,$white);
imagecopymerge($dst_im,$src_im,0,0,0,0,$src_w,$src_h,100);//原图图像写入新建真彩位图中
//imagefilledrectangle($dst_im,1,$src_h-15,80,$src_h,$white);
switch($watertype)
{
case 1: //加水印字符串
imagestring($dst_im,5,5,$src_h-20,$waterstring,$orange);//文字水印,字体5号颜色橙色,位于背景图左下角
break;
case 2: //加水印图片
$lim_size = getimagesize($waterimg); //取得水印图像尺寸,信息
switch($lim_size[2]) //判断水印图片文件类型
{
case 1://gif
$src_lim = imagecreatefromgif($waterimg); //取得水印图像
break;
case 2://jpg
$src_lim = imagecreatefromjpeg($waterimg);
break;
case 3://png
$src_lim = imagecreatefrompng($waterimg);
break;
//case 6:
//$src_im=imagecreatefromwbmp($waterimg);
//break;
default:
die("不支持的文件类型");
exit;
}
$src_lw = ($src_w-$lim_size[0])/2; //水印位于背景图正中央width定位
$src_lh = ($src_h-$lim_size[1])/2; //height定位
imagecopymerge($dst_im,$src_lim,$src_lw,$src_lh,0,0,$lim_size[0],$lim_size[1],$waterclearly);// 合并两个图像,设置水印透明度$waterclearly
imagedestroy($src_lim);
break;
}
switch($src_type)
{
case 1:
imagegif($dst_im,$all_path,$imclearly);//生成gif文件,图片清晰度0-100
break;
case 2:
imagejpeg($dst_im,$all_path,$imclearly);//生成jpg文件,图片清晰度0-100
break;
case 3:
imagepng($dst_im,$all_path,$imclearly);//生成png文件,图片清晰度0-100
break;
//case 6:
//imagewbmp($dst_im,$all_path);
break;
}
//释放缓存
imagedestroy($dst_im);
}
if($smallmark == 1)
{
$sall_path = $path_sim.time().".".$filetype;
if (file_exists($sall_path))
{
echo "同名文件已经存在了";
exit;
}
if($src_w {
$dst_sim = imagecreatetruecolor($src_w,$src_h); //新建缩略图真彩位图
imagecopymerge($dst_sim,$src_im,0,0,0,0,$src_w,$src_h,100); //原图图像写入新建真彩位图中
}
if($src_w > $dst_sw) // 原图尺寸 > 缩略图尺寸
{
$dst_sh = $dst_sw/$src_w*$src_h;
$dst_sim = imagecreatetruecolor($dst_sw,$dst_sh); //新建缩略图真彩位图(等比例缩小原图尺寸)
imagecopyresampled($dst_sim,$src_im,0,0,0,0,$dst_sw,$dst_sh,$src_w,$src_h); //原图图像写入新建真彩位图中
}
switch($src_type)
{
case 1:
imagegif($dst_sim,$sall_path,$simclearly);//生成gif文件,图片清晰度0-100
break;
case 2:
imagejpeg($dst_sim,$sall_path,$simclearly);//生成jpg文件,图片清晰度0-100
break;
case 3:
imagepng($dst_sim,$sall_path,$simclearly);//生成png文件,图片清晰度0-100
break;
//case 6:
//imagewbmp($dst_sim,$sall_path);
break;
}
//释放缓存
imagedestroy($dst_sim);
}
//释放缓存
imagedestroy($src_im);
}
?>

php等比例生成缩略图函数2
复制代码 代码如下:
function reSizeImg($imgSrc, $resize_width, $resize_height, $isCut=false) {
//图片的类型
$type = substr ( strrchr ( $imgSrc, "." ), 1 );
//初始化图象
if ($type == "jpg") {
$im = imagecreatefromjpeg ( $imgSrc );
}
if ($type == "gif") {
$im = imagecreatefromgif ( $imgSrc );
}
if ($type == "png") {
$im = imagecreatefrompng ( $imgSrc );
}
//目标图象地址
$full_length = strlen ( $imgSrc );
$type_length = strlen ( $type );
$name_length = $full_length - $type_length;
$name = substr ( $imgSrc, 0, $name_length - 1 );
$dstimg = $name . "_s." . $type;
$width = imagesx ( $im );
$height = imagesy ( $im );
//生成图象
//改变后的图象的比例
$resize_ratio = ($resize_width) / ($resize_height);
//实际图象的比例
$ratio = ($width) / ($height);
if (($isCut) == 1) //裁图
{
if ($ratio >= $resize_ratio) //高度优先
{
$newimg = imagecreatetruecolor ( $resize_width, $resize_height );
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, (($height) * $resize_ratio), $height );
ImageJpeg ( $newimg, $dstimg );
}
if ($ratio {
$newimg = imagecreatetruecolor ( $resize_width, $resize_height );
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, $resize_height, $width, (($width) / $resize_ratio) );
ImageJpeg ( $newimg, $dstimg );
}
} else //不裁图
{
if ($ratio >= $resize_ratio) {
$newimg = imagecreatetruecolor ( $resize_width, ($resize_width) / $ratio );
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, $resize_width, ($resize_width) / $ratio, $width, $height );
ImageJpeg ( $newimg, $dstimg );
}
if ($ratio $newimg = imagecreatetruecolor ( ($resize_height) * $ratio, $resize_height );
imagecopyresampled ( $newimg, $im, 0, 0, 0, 0, ($resize_height) * $ratio, $resize_height, $width, $height );
ImageJpeg ( $newimg, $dstimg );
}
}
ImageDestroy ( $im );
}
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

See all articles