php在线生成ico文件的代码

2018-09-07 11:59

阅读:510

  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]);
includephpthumb.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=makemethod=postenctype=multipart/form-data>
<table>
<tr>
<td><b>请上传你要转换的图片</b><br>支持格式png,jpg,gif</td>
</tr>
<tr>
<td><inputtype=filename=upimagesize=30></td>
</tr>
<tr>
<td>目标尺寸:
<inputtype=radioname=sizevalue=1id=s1><labelfor=s1>16*16</label>
<inputtype=radioname=sizevalue=2id=s2checked><labelfor=s2>32*32</label>
<inputtype=radioname=sizevalue=3id=s3><labelfor=s3>48*48</label>
</td>
</tr>
<tr>
<tdalign=right><inputtype=submitvalue=生成></td>
</tr>
<?PHP
if($output){
echo<tr><td><divstyle=\border:1pxsolid#D8D8B2;background-color:#FFFFDD;padding:10px\>.$output.</div></td></tr>;
}
?>
<tr>
<td><divstyle=color:#cccccc;font-size:11px;>Poweredby<ahref=非常爱漫</a></div></td>
</tr>
</table>
</form>
</body>
</html>

phpthumb.ico.php
复制代码 代码如下:
<?php
//////////////////////////////////////////////////////////////
//availableat
//////////////////////////////////////////////////////////////
/////
//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].=\x28\x00\x00\x00;//DWORDbiSize;
$BitmapInfoHeader[$key].=$this->LittleEndian2String($ImageWidths[$key],4);//LONGbiWidth;
//ThebiHeightmemberspecifiesthecombined
//heightoftheXORandANDmasks.
$BitmapInfoHeader[$key].=$this->LittleEndian2String($ImageHeights[$key]*2,4);//LONGbiHeight;
$BitmapInfoHeader[$key].=\x01\x00;//WORDbiPlanes;
$BitmapInfoHeader[$key].=chr($bpp[$key]).\x00;//wBitCount;
$BitmapInfoHeader[$key].=\x00\x00\x00\x00;//DWORDbiCompression;
$BitmapInfoHeader[$key].=$this->LittleEndian2String($biSizeImage,4);//DWORDbiSizeImage;
$BitmapInfoHeader[$key].=\x00\x00\x00\x00;//LONGbiXPelsPerMeter;
$BitmapInfoHeader[$key].=\x00\x00\x00\x00;//LONGbiYPelsPerMeter;
$BitmapInfoHeader[$key].=\x00\x00\x00\x00;//DWORDbiClrUsed;
$BitmapInfoHeader[$key].=\x00\x00\x00\x00;//DWORDbiClrImportant;
}


$icondata=\x00\x00;//idReserved;//Reserved(mustbe0)
$icondata.=\x01\x00;//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(idCountofem)

$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.=\x01\x00;//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));
}

}

?>


评论


亲,登录后才可以留言!