php在线生成ico文件的代码_php教程-查字典教程网
php在线生成ico文件的代码
php在线生成ico文件的代码
发布时间:2016-12-29 来源:查字典编辑
摘要:index.php复制代码代码如下:ICO图标在线转换body{background-color:#fff;color:#000000;fo...

index.php

复制代码 代码如下:

<?PHP

$output="";

if(isset($_GET['action'])&&$_GET['action']=='make'){

if(isset($_FILES['upimage']['tmp_name'])&&$_FILES['upimage']['tmp_name']&&is_uploaded_file($_FILES['upimage']['tmp_name'])){

if($_FILES['upimage']['type']>210000){

echo"你上传的文件体积超过了限制最大不能超过200K";

exit();

}

$fileext=array("image/pjpeg","image/gif","image/x-png");

if(!in_array($_FILES['upimage']['type'],$fileext)){

echo"你上传的文件格式不正确仅支持jpg,gif,png";

exit();

}

if($im=@imagecreatefrompng($_FILES['upimage']['tmp_name'])or$im=@imagecreatefromgif($_FILES['upimage']['tmp_name'])or$im=@imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){

$imginfo=@getimagesize($_FILES['upimage']['tmp_name']);

if(!is_array($imginfo)){

echo"图形格式错误!";

}

switch($_POST['size']){

case1;

$resize_im=@imagecreatetruecolor(16,16);

$size=16;

break;

case2;

$resize_im=@imagecreatetruecolor(32,32);

$size=32;

break;

case3;

$resize_im=@imagecreatetruecolor(48,48);

$size=48;

break;

default;

$resize_im=@imagecreatetruecolor(32,32);

$size=32;

break;

}

imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]);

include"phpthumb.ico.php";

$icon=newphpthumb_ico();

$gd_image_array=array($resize_im);

$icon_data=$icon->GD2ICOstring($gd_image_array);

$filename="temp/".date("Ymdhis").rand(1,1000).".ico";

if(file_put_contents($filename,$icon_data)){

$output="生成成功!请点右键->另存为保存到本地<br><ahref="".$filename.""target="_blank">点击下载</a>";

}

}else{

echo"生成错误请重试!";

}

}

}

?>

<html>

<head>

<title>ICO图标在线转换</title>

<style>

body{background-color:#fff;color:#000000;font-family:arial;margin:30px;font-size:12px;}

table{border:0}

td{line-height:16px;}

label{cursor:hand;}

</style>

</head>

<body>

<h1>ICO图标在线转换</h1>

<formaction="?action=make"method="post"enctype='multipart/form-data'>

<table>

<tr>

<td><b>请上传你要转换的图片</b><br>支持格式png,jpg,gif</td>

</tr>

<tr>

<td><inputtype="file"name="upimage"size="30"></td>

</tr>

<tr>

<td>目标尺寸:

<inputtype="radio"name="size"value="1"id="s1"><labelfor="s1">16*16</label>

<inputtype="radio"name="size"value="2"id="s2"checked><labelfor="s2">32*32</label>

<inputtype="radio"name="size"value="3"id="s3"><labelfor="s3">48*48</label>

</td>

</tr>

<tr>

<tdalign="right"><inputtype="submit"value="生成"></td>

</tr>

<?PHP

if($output){

echo"<tr><td><div>".$output."</div></td></tr>";

}

?>

<tr>

<td><div>Poweredby<ahref="http://veryim.com">非常爱漫</a></div></td>

</tr>

</table>

</form>

</body>

</html>

phpthumb.ico.php

复制代码 代码如下:

<?php

//////////////////////////////////////////////////////////////

///phpThumb()byJamesHeinrich<info@silisoftware.com>//

//availableathttp://phpthumb.sourceforge.net///

//////////////////////////////////////////////////////////////

/////

//phpthumb.ico.php-.ICOoutputformatfunctions//

/////

//////////////////////////////////////////////////////////////

classphpthumb_ico{

functionphpthumb_ico(){

returntrue;

}

functionGD2ICOstring(&$gd_image_array){

foreach($gd_image_arrayas$key=>$gd_image){

$ImageWidths[$key]=ImageSX($gd_image);

$ImageHeights[$key]=ImageSY($gd_image);

$bpp[$key]=ImageIsTrueColor($gd_image)?32:24;

$totalcolors[$key]=ImageColorsTotal($gd_image);

$icXOR[$key]='';

for($y=$ImageHeights[$key]-1;$y>=0;$y--){

for($x=0;$x<$ImageWidths[$key];$x++){

$argb=$this->GetPixelColor($gd_image,$x,$y);

$a=round(255*((127-$argb['alpha'])/127));

$r=$argb['red'];

$g=$argb['green'];

$b=$argb['blue'];

if($bpp[$key]==32){

$icXOR[$key].=chr($b).chr($g).chr($r).chr($a);

}elseif($bpp[$key]==24){

$icXOR[$key].=chr($b).chr($g).chr($r);

}

if($a<128){

@$icANDmask[$key][$y].='1';

}else{

@$icANDmask[$key][$y].='0';

}

}

//maskbitsare32-bitalignedperscanline

while(strlen($icANDmask[$key][$y])%32){

$icANDmask[$key][$y].='0';

}

}

$icAND[$key]='';

foreach($icANDmask[$key]as$y=>$scanlinemaskbits){

for($i=0;$i<strlen($scanlinemaskbits);$i+=8){

$icAND[$key].=chr(bindec(str_pad(substr($scanlinemaskbits,$i,8),8,'0',STR_PAD_LEFT)));

}

}

}

foreach($gd_image_arrayas$key=>$gd_image){

$biSizeImage=$ImageWidths[$key]*$ImageHeights[$key]*($bpp[$key]/8);

//BITMAPINFOHEADER-40bytes

$BitmapInfoHeader[$key]='';

$BitmapInfoHeader[$key].="x28x00x00x00";//DWORDbiSize;

$BitmapInfoHeader[$key].=$this->LittleEndian2String($ImageWidths[$key],4);//LONGbiWidth;

//ThebiHeightmemberspecifiesthecombined

//heightoftheXORandANDmasks.

$BitmapInfoHeader[$key].=$this->LittleEndian2String($ImageHeights[$key]*2,4);//LONGbiHeight;

$BitmapInfoHeader[$key].="x01x00";//WORDbiPlanes;

$BitmapInfoHeader[$key].=chr($bpp[$key])."x00";//wBitCount;

$BitmapInfoHeader[$key].="x00x00x00x00";//DWORDbiCompression;

$BitmapInfoHeader[$key].=$this->LittleEndian2String($biSizeImage,4);//DWORDbiSizeImage;

$BitmapInfoHeader[$key].="x00x00x00x00";//LONGbiXPelsPerMeter;

$BitmapInfoHeader[$key].="x00x00x00x00";//LONGbiYPelsPerMeter;

$BitmapInfoHeader[$key].="x00x00x00x00";//DWORDbiClrUsed;

$BitmapInfoHeader[$key].="x00x00x00x00";//DWORDbiClrImportant;

}

$icondata="x00x00";//idReserved;//Reserved(mustbe0)

$icondata.="x01x00";//idType;//ResourceType(1foricons)

$icondata.=$this->LittleEndian2String(count($gd_image_array),2);//idCount;//Howmanyimages?

$dwImageOffset=6+(count($gd_image_array)*16);

foreach($gd_image_arrayas$key=>$gd_image){

//ICONDIRENTRYidEntries[1];//Anentryforeachimage(idCountof'em)

$icondata.=chr($ImageWidths[$key]);//bWidth;//Width,inpixels,oftheimage

$icondata.=chr($ImageHeights[$key]);//bHeight;//Height,inpixels,oftheimage

$icondata.=chr($totalcolors[$key]);//bColorCount;//Numberofcolorsinimage(0if>=8bpp)

$icondata.="x00";//bReserved;//Reserved(mustbe0)

$icondata.="x01x00";//wPlanes;//ColorPlanes

$icondata.=chr($bpp[$key])."x00";//wBitCount;//Bitsperpixel

$dwBytesInRes=40+strlen($icXOR[$key])+strlen($icAND[$key]);

$icondata.=$this->LittleEndian2String($dwBytesInRes,4);//dwBytesInRes;//Howmanybytesinthisresource?

$icondata.=$this->LittleEndian2String($dwImageOffset,4);//dwImageOffset;//Whereinthefileisthisimage?

$dwImageOffset+=strlen($BitmapInfoHeader[$key]);

$dwImageOffset+=strlen($icXOR[$key]);

$dwImageOffset+=strlen($icAND[$key]);

}

foreach($gd_image_arrayas$key=>$gd_image){

$icondata.=$BitmapInfoHeader[$key];

$icondata.=$icXOR[$key];

$icondata.=$icAND[$key];

}

return$icondata;

}

functionLittleEndian2String($number,$minbytes=1){

$intstring='';

while($number>0){

$intstring=$intstring.chr($number&255);

$number>>=8;

}

returnstr_pad($intstring,$minbytes,"x00",STR_PAD_RIGHT);

}

functionGetPixelColor(&$img,$x,$y){

if(!is_resource($img)){

returnfalse;

}

return@ImageColorsForIndex($img,@ImageColorAt($img,$x,$y));

}

}

?>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类