php生成缩略图代码
<?
/**
* 生成缩略图
* $srcName----为原图片路径
* $newWidth,$newHeight----分别缩略图的最大宽,高
* $newName----为缩略图文件名(含路径),默认为加入thumbnail
* @param string $srcName
* @param int $newWidth
* @param int $newHeight
* @param string $newName
* return viod
*/
function resizeImg($srcName,$newWidth,$newHeight,$newName="")
{
if($newName=="")
{
$nameArr=explode('.',$srcName);
$expName=array_pop($nameArr);
$expName='thumbnail.'.$expName;
array_push($nameArr,$expName);
$newName = implode('.',$nameArr);
}
$info = "";
$data = getimagesize($srcName,$info);
switch ($data[2])
{
case 1:
if(!function_exists("imagecreatefromgif")){
echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!返回";
exit();
}
$im = ImageCreateFromGIF($srcName);
break;
case 2:
if(!function_exists("imagecreatefromjpeg")){
echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!返回";
exit();
}
$im = ImageCreateFromJpeg($srcName);
break;
case 3:
$im = ImageCreateFromPNG($srcName);
break;
}
$srcW=ImageSX($im);
$srcH=ImageSY($im);
$newWidthH=$newWidth/$newHeight;
$srcWH=$srcW/$srcH;
if($newWidthH<=$srcWH){
$ftoW=$newWidth;
$ftoH=$ftoW*($srcH/$srcW);
}
else{
$ftoH=$newHeight;
$ftoW=$ftoH*($srcW/$srcH);
}
if($srcW>$newWidth||$srcH>$newHeight)
{
if(function_exists("imagecreatetruecolor"))
{
@$ni = ImageCreateTrueColor($ftoW,$ftoH);
if($ni) ImageCopyResampled($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
else
{
$ni=ImageCreate($ftoW,$ftoH);
ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
}
}
else
{
$ni=ImageCreate($ftoW,$ftoH);
ImageCopyResized($ni,$im,0,0,0,0,$ftoW,$ftoH,$srcW,$srcH);
}
if(function_exists('imagejpeg')) ImageJpeg($ni,$newName);
else ImagePNG($ni,$newName);
ImageDestroy($ni);
}
ImageDestroy($im);
}
resizeImg('123.JPG',150,150);
?>
php截屏代码
<?php
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://www.111cn.net");
/* Still working? */
while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>
php+mysql 图象输入输出
我看了网上的例子~用了~发现图片进数据库没问题~但是关于输出部分总是报错~
代码如下
建库:
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
进库:<?php
$Picture=$_POST[file]; //flie是 我那个图片上传页的表单的传递
If($Picture != "none")
{ $PSize = filesize($Picture);
$mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
mysql_connect("localhost","root","") or die("Unable to connect to SQL server");
@mysql_select_db("mymg") or die("Unable to select database");
mysql_query("INSERT INTO images (image) VALUES ('$mysqlPicture')") or die("Cant Perform Query"); }
else
{ echo"You did not upload any picture"; }
?>
程序到这里都没问题~我用CMD看了下 数据库里也有东西.
输出:
<html>
<body>
<?php
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Cant Perform Query");
While($row=mysql_fetch_object($result))
{ echo "<IMG SRC='Second.php ? PicNum=$row- > PicNum'/>"};! ?>
</body>
</html>
'Second.php:
<?php
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->image;
?>
一直想在网上找个图片所略图程序,但是一直没有找到无变形的,一般都是对原图进行简单的缩放。
我想也许已经有了,只是我没有找到,所以没办法自己写了一个,其实也不是全是自己写的,只是
在已有的基础上改的!
源码如下:
<?php
/*
*版权说明:该版本是在“IEB_UPLOAD CLASS Ver 1.1”的基础上二次开发的,原程序对
*图片的裁剪将使图片变形、失真!本人在该程序的基础上进行了更改,用数据参数与原图片
*文件参数(主要是指宽和高)进行对比,得出比例值,先生成与原图片同比例缩放的图片,然
*后再以该中间图中心开始截取,从而获得缩略图,当然,图片会被裁剪,但是是最小限度的
*裁剪!
*程序设计:swin.wang Email: php_in_china@yahoo.com.cn QQ:592298893
*
*该程序你可无限制使用,但请保留版权信息
×
×使用犯法:
* $upfos = new ieb_upload('photo_file','./up_img'); photo_file 表单文件域名称,不要加$; ./up_img,上传位置
* $old_file_name=$upfos -> getName();
* $old_file_fooder=$upfos -> getExt();
* $file_size=$upfos -> getSize();
* $file_name=$upfos -> newName();
* $upfos -> upload($file_name);
* $upfos -> thumb("small_",125,120);
* $new_file_name=$upfos -> UpFile(); $new_file_name 上传后大图名
× $small_file_name="small_".$new_file_name; $small_file_name 所略图名
*/
class ieb_upload{
var $FormName; //文件域名称
var $Directroy; //上传至目录
var $MaxSize; //最大上传大小
var $CanUpload; //是否可以上传
var $doUpFile; //上传的文件名
var $sm_File; //缩略图名称
var $Error; //错误参数
function ieb_upload($formName='', $dirPath='', $maxSize=2097152) //(1024*2)*1024=2097152 就是 2M
{
global $FormName, $Directroy, $MaxSize, $CanUpload, $Error, $doUpFile, $sm_File;
//初始化各种参数
$FormName = $formName;
$MaxSize = $maxSize;
$CanUpload = true;
$doUpFile = '';
$sm_File = '';
$Error = 0;
if ($formName == ''){
$CanUpload = false;
$Error = 1;
break;
}
if ($dirPath == ''){
$Directroy = $dirPath;
}else{
$Directroy = $dirPath.'/';
}
}
//检查文件是否存在
function scanFile()
{
global $FormName, $Error, $CanUpload;
if ($CanUpload){
$scan = is_readable($_FILES[$FormName]['name']);
if ($scan){
$Error = 2;
}
return $scan;
}
}
//获取文件大小
function getSize($format = 'B')
{
global $FormName, $Error, $CanUpload;
if ($CanUpload){
if ($_FILES[$FormName]['size'] == 0){
$Error = 3;
$CanUpload = false;
}
switch ($format){
case 'B':
return $_FILES[$FormName]['size'];
break;
case 'M':
return ($_FILES[$FormName]['size'])/(1024*1024);
}
}
}
//获取文件类型
function getExt()
{
global $FormName, $Error, $CanUpload;
if ($CanUpload){
$ext=$_FILES[$FormName]['name'];
$extStr=explode('.',$ext);
$count=count($extStr)-1;
}
return $extStr[$count];
}
//获取文件名称
function getName()
{
global $FormName, $CanUpload;
if ($CanUpload){
return $_FILES[$FormName]['name'];
}
}
//新建文件名
function newName()
{
global $CanUpload, $FormName;
if ($CanUpload){
$FullName=$_FILES[$FormName]['name'];
$extStr=explode('.',$FullName);
$count=count($extStr)-1;
$ext = $extStr[$count];
return date('YmdHis').rand(0,9).'.'.$ext;
}
}
//上传文件
function upload($fileName = '')
{
global $FormName, $Directroy, $CanUpload, $Error, $doUpFile;
if ($CanUpload){
if ($_FILES[$FormName]['size'] == 0){
$Error = 3;
$CanUpload = false;
return $Error;
break;
}
}
if($CanUpload){
if ($fileName == ''){
$fileName = $_FILES[$FormName]['name'];
}
$doUpload=@copy($_FILES[$FormName]['tmp_name'], $Directroy.$fileName);
if($doUpload)
{
$doUpFile = $fileName;
chmod($Directroy.$fileName, 0777);
return true;
}else{
$Error = 4;
return $Error;
}
}
}
//创建图片缩略图
function thumb($dscChar='',$width=160,$height=120)
{
global $CanUpload, $Error, $Directroy, $doUpFile, $sm_File;
if ($CanUpload && $doUpFile != ''){
$srcFile = $doUpFile;
if ($dscChar == ''){
$dscChar = 'sm_';
}
$dscFile = $Directroy.$dscChar.$srcFile;
$data = getimagesize($Directroy.$srcFile,&$info);
switch ($data[2]) {
case 1:
$im = @imagecreatefromgif($Directroy.$srcFile);
break;
case 2:
$im = @imagecreatefromjpeg($Directroy.$srcFile);
break;
case 3:
$im = @imagecreatefrompng($Directroy.$srcFile);
break;
}
$srcW=imagesx($im);
$srcH=imagesy($im);
if(($srcW/$width)>=($srcH/$height)){
$temp_height=$height;
$temp_width=$srcW/($srcH/$height);
$src_X=abs(($width-$temp_width)/2);
$src_Y=0;
}
else{
$temp_width=$width;
$temp_height=$srcH/($srcW/$width);
$src_X=0;
$src_Y=abs(($height-$temp_height)/2);
}
$temp_img=imagecreatetruecolor($temp_width,$temp_height);
imagecopyresized($temp_img,$im,0,0,0,0,$temp_width,$temp_height,$srcW,$srcH);
$ni=imagecreatetruecolor($width,$height);
imagecopyresized($ni,$temp_img,0,0,$src_X,$src_Y,$width,$height,$width,$height);
$cr = imagejpeg($ni,$dscFile);
chmod($dscFile, 0777);
if ($cr){
$sm_File = $dscFile;
return true;
}else{
$Error = 5;
return $Error;
}
}
}
//显示错误参数
function Err(){
global $Error;
return $Error;
}
//上传后的文件名
function UpFile(){
global $doUpFile, $Error;
if ($doUpFile != ''){
return $doUpFile;
}else{
$Error = 6;
}
}
//上传文件的路径
function filePath(){
global $Directroy, $doUpFile, $Error;
if ($doUpFile != ''){
return $Directroy.$doUpFile;
}else{
$Error = 6;
}
}
//缩略图文件名称
function thumbMap(){
global $sm_File, $Error;
if ($sm_File != ''){
return $sm_File;
}else{
$Error = 6;
}
}
//显示版本信息
function ieb_version(){
return 'swin img class Ver 0.1';
}
}
?>
php图片验证码
<?php
//FileName:authimg.php
//Description:
//Creater:alvar
//Createtime:2006-5-4
//Lastmodtime:
session_start();
?>
<?php
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用
//session_start();//将随机数存入session中
$_SESSION['authnum']="";
$im = imagecreate(90,20) or die("Cant's initialize new GD image stream!"); //制定图片背景大小
$red = ImageColorAllocate($im, 255,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
//imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0)
imagefill($im,0,0,$white);//ed
//生成数字和字母混合的验证码方法
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
$list=explode(",",$ychar);
for($i=0;$i<4;$i++){
$randnum=rand(0,35);
$authnum.=$list[$randnum]." ";//ed 加入一个空格
}
//while(($authnum=rand()%100000)<10000); //生成随机的四位数
//将四位整数验证码绘入图片
$_SESSION['authnum']=$authnum;
//int imagestring(resource image,int font,int x,int y,string s, int col)
imagestring($im, 5, 10, 3, $authnum, $red);
//用col颜色将字符串s画到image所代表的图像的x,y座标处(图像的左上角为0,0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体
for($i=0;$i<400;$i++){ //加入干扰象素 {
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
// imagesetpixel($im, rand()%90 , rand()%30 , $randcolor);
imagesetpixel($im, rand()%90 , rand()%30 , $gray);
}
ImagePNG($im);
ImageDestroy($im);
?>
肯了些时间,把自己的心得写出来,也算是说下自己的理解吧,
用理解错误的地方请指正,我也是菜菜,
我拿一篇写的不错的文章来分析,或者按照自己的思路来看他的代码.
php图片验证技术关键的是用个函数
imagestring()这个函数,老样子看下函数原型,对理解会有好大的帮助
//int imagestring(resource image,int font,int x,int y,string s, int col);
看下手册会有好多帮助
imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
这里主要有三个关键参数
resource image,string s ,int col
1,
下面来看看
resource image ,int col
这二个一起分析,为啥,慢慢来看
这个image是划好的图
要划图,要遵循几步
1.1
第一是创建图像文件流
imagecreate()当然用imagecreateturecolor()也可以,
这里用imagecreate来例子,
老方法看函数原型和手册的解释
resource imagecreate ( int x_size, int y_size)
imagecreate() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的空白图像。
那么咱们就可以使用它来创建一个空白图像.
$im=imagecreate(90,30);
1.2
因为是空白的,所以要找给它填充的颜色
用到这个函数
imagecolorallocate()
看原型和手册
int imagecolorallocate ( resource image, int red, int green, int blue)
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。image 参数是 imagecreate() 函数的返回值。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。
看下最后一句,imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色,那么咱们来建立几种颜色,来方便以后的填充,同时这个颜色也是
这里主要有三个关键参数
resource image,string s ,int col
int col 的颜色设置
我们来方便设置三个颜色吧
$red=imagecolorallocate($im,255,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
这三个不用解释了吧,就是r g b 配合出来的颜色.
1.3,
既然空白图像和填充颜色已经出来了,那我们来填充吧
用到这个函数
imagefill()
int imagefill ( resource image, int x, int y, int color)
imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。
imagefill($im,0,0,$white);//用白色填充是为了让干扰素更好的起作用
那这样我的三个参数中其中二个参数已经解决了,resource image,int col
我们来看第二个参数string s;
2
第二个参数string s
2,1
因为是验证码,防止恶意攻击,那么一定要设置成随机出来的那样才不会出问题,
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用,
生成数字和字母混合的验证码
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
$list=explode(",",$ychar);//explode函数比较简单,就是提前每个间隔,的字符并把他们组成数组,不理解的看下手册吧,很容易理解的
已经产生了一个包含这36个字符的数组,剩下的就是让他们产生随机的四位数了
for($i=0;$i<4;$i++){
$randnum=rand(0,35);
$authnum.=$list[$randnum]." ";//ed 加入一个空格
}
这个循环,循环的次数是四次,我还是在解释下吧,其实很简单,
假设第一次循环,rand(0,35)意思是随机出现0到35之间的数组
假设是第0个,那么就是1 $authnum=1."";
第二次循环
如果$randum=12,那么$authnum=1.$list[$randnum]."";
也就是$authnum=1 C;
如此循环到第四位,
那么就这样产生了随机的四位数,
既然三个参数我们都解决了,那么就可以用
imagestring()函数来创建图片了,
imagestring($im, 5, 10, 3, $authnum, $red);
创建了以后,我们要输出图片
imagepng($im);
imagedestroy($im);
同时我们要在文件头说明,要输出的文件的类型
Header("Content-type: image/PNG");
3
其实功能是实现了,但是为了更好的安全,我们要加入干扰素,
啥是干扰素就是干扰的因素呗,哈
用到这个函数
int imagesetpixel ( resource image, int x, int y, int color)
imagesetpixel() 在 image 图像中用 color 颜色在 x, y 坐标(图像左上角为 0, 0)上画一个点。
看他的解释,在画一个点,所以咱们肯定要用个循环了,
就是多画几个点,哈
for($i=0;$i<400;$i++){ //加入干扰象素
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%90 , rand()%30 , $gray);
}
for循环的第一个,产生随机的颜色,当然也可以使用咱们上面定义的
这里用的就是上面定义的$gray,那个400是产生的像素点的个数
没啥要解释的了吧
相关文章
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
- 这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
- 解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
- 下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
- 这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
- 这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
- 这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
- 这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25