蝙蝠岛资源网 Design By www.hbtsch.com
1,phpthumb_ico 是生成ICO图标的类,源码如下
class phpthumb_ico {
function phpthumb_ico() {
return true;
}
function GD2ICOstring(&$gd_image_array) {
foreach ($gd_image_array as $key => $gd_image) {
$ImageWidths[$key] = ImageSX($gd_image);
$ImageHeights[$key] = ImageSY($gd_image);
$bpp[$key] = ImageIsTrueColor($gd_image) "\x28\x00\x00\x00"; // DWORD biSize;
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4); // LONG biWidth;
// The biHeight member specifies the combined
// height of the XOR and AND masks.
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG biHeight;
$BitmapInfoHeader[$key] .= "\x01\x00"; // WORD biPlanes;
$BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00"; // wBitCount;
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD biCompression;
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4); // DWORD biSizeImage;
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG biXPelsPerMeter;
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // LONG biYPelsPerMeter;
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD biClrUsed;
$BitmapInfoHeader[$key] .= "\x00\x00\x00\x00"; // DWORD biClrImportant;
}
$icondata = "\x00\x00"; // idReserved; // Reserved (must be 0)
$icondata .= "\x01\x00"; // idType; // Resource Type (1 for icons)
$icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount; // How many images"\x00"; // bReserved; // Reserved ( must be 0)
$icondata .= "\x01\x00"; // wPlanes; // Color Planes
$icondata .= chr($bpp[$key])."\x00"; // wBitCount; // Bits per pixel
$dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
$icondata .= $this->LittleEndian2String($dwBytesInRes, 4); // dwBytesInRes; // How many bytes in this resource"\x00", STR_PAD_RIGHT);
}
function GetPixelColor(&$img, $x, $y) {
if (!is_resource($img)) {
return false;
}
return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
}
}
2,后台
引入类:
Yii::$enableIncludePath = false; Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );
解决生成黑色背景的问题
imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色
完整方法:
/**
* icoMaker 在线生成ICO图标
* @author flashalliance
*/
public function actionIco() {
$this->breadcrumbs=array_merge($this->breadcrumbs,array(
'ICO图标制作'
));
$output = "";
$errors=array();
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']['size']>204800){
$errors[]="你上传的文件过大,最大不能超过200K。";
}
$fileext = array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png");
if(!in_array($_FILES['upimage']['type'],$fileext)){
$errors[]="你上传的文件格式不正确,仅支持 png, jpg, gif格式。";
}
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)){
$errors[]="图像格式错误!";
}
if(empty($errors)){
switch($_POST['size']){
case 1;
$resize_im = @imagecreatetruecolor(16,16);
$size = 16;
break;
case 2;
$resize_im = @imagecreatetruecolor(32,32);
$size = 32;
break;
case 3;
$resize_im = @imagecreatetruecolor(48,48);
$size = 48;
break;
default;
$resize_im = @imagecreatetruecolor(32,32);
$size = 32;
break;
}
imagesavealpha($im, true);
imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色,解决生成黑色背景的问题
imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]);
Yii::$enableIncludePath = false;
Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );
$icon = new phpthumb_ico();
$gd_image_array = array($resize_im);
$icon_data = $icon->GD2ICOstring($gd_image_array);
$bas_path=dirname ( Yii::app ()->BasePath );
$bas_new_path=$bas_path.'/upload/ico/';
if(!is_dir($bas_new_path)){
mkdir($bas_new_path, 0777, true);
}
$filePath=$bas_new_path. date("Ymdhis").uniqid(). rand(1,1000) . ".ico";
if(file_put_contents($filePath, $icon_data)){
$output = str_replace($bas_path,'',$filePath);
}
}
}else{
$errors[]="生成错误请重试!";
}
}
}
$this->render ( 'ico',array('output'=>$output,'errors'=>$errors));
}
3,前台
<div class="col-md-12">
<div class="form-horizontal panel panel-default margin-t-10 b-img">
<div class="panel-heading">
<div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>在线制作ICO图标</div>
<div class="clearfix"></div>
</div>
<"form-group">
<label class="col-lg-2 control-label">上传文件</label>
<div class="col-md-5">
<div class="col-md-6">
<input id="upimage" type="file" name="upimage" class="hidden">
<input id="tmp_file" class="form-control" type="text">
</div>
<div class="col-md-6"><a class="btn btn-default" onclick="$('input[id=upimage]').click();">选择文件</a></div>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 text-right">选择尺寸</label>
<div class="col-lg-5 btn-group" data-toggle="buttons">
<label class="btn btn-sm btn-default">
<input type="radio" name="size" id="s1" value="1" checked="checked"> 16*16
</label>
<label class="btn btn-sm btn-default">
<input type="radio" name="size" id="s2" value="2"> 32*32
</label>
<label class="btn btn-sm btn-default">
<input type="radio" name="size" id="s3" value="3"> 48*48
</label>
</div>
</div>
<div class="form-group">
<label class="col-lg-2 text-right">支持格式</label>
<div class="col-lg-5">
png,jpg,gif
</div>
</div>
<div class="list_back">
<input type="submit" value="生 成" class="btn btn-success">
</div>
</div>
<"form-horizontal panel panel-default margin-t-10 b-img">
<div class="panel-heading margin-b-10">
<div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>生成结果</div>
<div class="clearfix"></div>
</div>
<"form-group">
<label class="col-lg-2 text-right">生成失败</label>
<div class="col-lg-5">
<"form-group">
<label class="col-lg-2 text-right">成功生成</label>
<div class="col-lg-5">
<img alt="在线制作ICO图标_favicon.ico" src="/UploadFiles/2021-04-02/<">
<"/x28/x00/x00/x00"; // DWORD biSize;
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4); // LONG biWidth;
// The biHeight member specifies the combined
// height of the XOR and AND masks.
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG biHeight;
$BitmapInfoHeader[$key] .= "/x01/x00"; // WORD biPlanes;
$BitmapInfoHeader[$key] .= chr($bpp[$key])."/x00"; // wBitCount;
$BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // DWORD biCompression;
$BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4); // DWORD biSizeImage;
$BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // LONG biXPelsPerMeter;
$BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // LONG biYPelsPerMeter;
$BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // DWORD biClrUsed;
$BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // DWORD biClrImportant;
}
$icondata = "/x00/x00"; // idReserved; // Reserved (must be 0)
$icondata .= "/x01/x00"; // idType; // Resource Type (1 for icons)
$icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount; // How many images"/x00"; // bReserved; // Reserved ( must be 0)
$icondata .= "/x01/x00"; // wPlanes; // Color Planes
$icondata .= chr($bpp[$key])."/x00"; // wBitCount; // Bits per pixel
$dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
$icondata .= $this->LittleEndian2String($dwBytesInRes, 4); // dwBytesInRes; // How many bytes in this resource"/x00", STR_PAD_RIGHT);
}
function GetPixelColor(&$img, $x, $y) {
if (!is_resource($img)) {
return false;
}
return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
}
}
"htmlcode">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ico图标</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="center">
<"";
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","image/png","image/jpeg","image/jpg");
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']){
case 1;
$resize_im = @imagecreatetruecolor(16,16);
$size = 16;
break;
case 2;
$resize_im = @imagecreatetruecolor(32,32);
$size = 32;
break;
case 3;
$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 = new phpthumb_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><a href="/" mce_href="/""".$filename."/" target=/"_blank/">点击下载</a>";
}
}else{
echo "生成错误请重试!";
}
}
}
"index.php" method="post" enctype='multipart/form-data'>
<table width="90%" align="center">
<tr>
<td height="40"><h3>请上传你要转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>的图片</h3>
支持格式 png、jpg、gif在线转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标。如何你想制作更丰富的.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标请<a href="#ico" mce_href="#ico">下载ICO制作软件</a></td>
</tr>
<tr>
<td height="40"><input type="file" name="upimage" size="30">目标尺寸:
<input type="radio" name="size" value="1" id="s1"><label for="s1">16*16</label>
<input type="radio" name="size" value="2" id="s2" checked><label for="s2">32*32</label>
<input type="radio" name="size" value="3" id="s3"><label for="s3">48*48</label>
</td>
</tr>
<tr>
<td height="40" align="center"><input type="submit" style="width:150px; height:30px;" value="在线生成favicon.ico图标"></td>
</tr>
<"<tr><td><div style="/" mce_style="/""border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>";
}
"display:none" mce_style="display:none">
<"link" );
foreach( $links as $link )
{
$publishers = $link->getElementsByTagName( "homepage" );
$homepage = $publishers->item(0)->nodeValue;
$titles = $link->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue;
$contents = $link->getElementsByTagName( "content" );
$content = $contents->item(0)->nodeValue;
echo "<a href="$homepage" mce_href="$homepage" title='$content' target='_blank' ></a>$title</a><br>";
}
?>
</div>
</form>
</body>
</html>
蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com
暂无PHP基于yii框架实现生成ICO图标的评论...
更新日志
2025年10月27日
2025年10月27日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]