复制代码 代码如下:
$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="生成成功!请点右键->另存为保存到本地
}
}else{
echo"生成错误请重试!";
}
}
}
?>
ICO图标在线转换
请上传你要转换的图片 支持格式png,jpg,gif |
目标尺寸: |
phpthumb.ico.php
复制代码 代码如下:
//////////////////////////////////////////////////////////////
///phpThumb()byJamesHeinrich
//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
}
}
}
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));
}
}
?>