亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于PHP基于yii框架實現生成ICO圖標的代碼解析

2020-03-22 20:12:56
字體:
來源:轉載
供稿:網友
本文給大家分享了2則php生成ICO圖標的代碼,第一款是基于YII框架實現的,第二款是純php編寫,都非常的不錯,有需要的小伙伴可以參考下

1,phpthumb_ico 是生成ICO圖標的類,源碼如下

html' target='_blank'>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) ? 32 : 24; $totalcolors[$key] = ImageColorsTotal($gd_image); $icXOR[$key] = for ($y = $ImageHeights[$key] - 1; $y $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 // mask bits are 32-bit aligned per scanline 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_array as $key = $gd_image) { $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8); // BITMAPINFOHEADER - 40 bytes $BitmapInfoHeader[$key] = $BitmapInfoHeader[$key] .= /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? $dwImageOffset = 6 + (count($gd_image_array) * 16); foreach ($gd_image_array as $key = $gd_image) { // ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of em) $icondata .= chr($ImageWidths[$key]); // bWidth; // Width, in pixels, of the image $icondata .= chr($ImageHeights[$key]); // bHeight; // Height, in pixels, of the image $icondata .= chr($totalcolors[$key]); // bColorCount; // Number of colors in image (0 if =8bpp) $icondata .= /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? $icondata .= $this- LittleEndian2String($dwImageOffset, 4); // dwImageOffset; // Where in the file is this image? $dwImageOffset += strlen($BitmapInfoHeader[$key]); $dwImageOffset += strlen($icXOR[$key]); $dwImageOffset += strlen($icAND[$key]); foreach ($gd_image_array as $key = $gd_image) { $icondata .= $BitmapInfoHeader[$key]; $icondata .= $icXOR[$key]; $icondata .= $icAND[$key]; return $icondata; function LittleEndian2String($number, $minbytes=1) { $intstring = while ($number 0) { $intstring = $intstring.chr($number 255); $number = 8; return str_pad($intstring, $minbytes, /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,前臺

 p >

再給大家分享一個獨立的類

phpthumb.ico.php

 ?php ////////////////////////////////////////////////////////////// /// phpThumb() by James Heinrich info@silisoftware.com // // available at http://phpthumb.sourceforge.net /// ////////////////////////////////////////////////////////////// /// // // phpthumb.ico.php - .ICO output format functions // // /// ////////////////////////////////////////////////////////////// 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) ? 32 : 24;  $totalcolors[$key] = ImageColorsTotal($gd_image);  $icXOR[$key] =  for ($y = $ImageHeights[$key] - 1; $y $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  // mask bits are 32-bit aligned per scanline  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_array as $key = $gd_image) {  $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);  // BITMAPINFOHEADER - 40 bytes  $BitmapInfoHeader[$key] =  $BitmapInfoHeader[$key] .= /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?  $dwImageOffset = 6 + (count($gd_image_array) * 16);  foreach ($gd_image_array as $key = $gd_image) {  // ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of em)  $icondata .= chr($ImageWidths[$key]); // bWidth; // Width, in pixels, of the image  $icondata .= chr($ImageHeights[$key]); // bHeight; // Height, in pixels, of the image  $icondata .= chr($totalcolors[$key]); // bColorCount; // Number of colors in image (0 if =8bpp)  $icondata .= /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?  $icondata .= $this- LittleEndian2String($dwImageOffset, 4); // dwImageOffset; // Where in the file is this image?  $dwImageOffset += strlen($BitmapInfoHeader[$key]);  $dwImageOffset += strlen($icXOR[$key]);  $dwImageOffset += strlen($icAND[$key]);  foreach ($gd_image_array as $key = $gd_image) {  $icondata .= $BitmapInfoHeader[$key];  $icondata .= $icXOR[$key];  $icondata .= $icAND[$key];  return $icondata;  function LittleEndian2String($number, $minbytes=1) {  $intstring =  while ($number 0) {  $intstring = $intstring.chr($number 255);  $number = 8;  return str_pad($intstring, $minbytes, /x00 , STR_PAD_RIGHT);  function GetPixelColor( $img, $x, $y) {  if (!is_resource($img)) {  return false;  return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y)); ? 

index.php

 !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  p >

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

關于Yii框架中sphinx索引配置的分析

關于yii2中使用webuploader實現圖片上傳的代碼

以上就是關于PHP基于yii框架實現生成ICO圖標的代碼解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人国产精品| 亚洲福利精品在线| 日韩精品www| 日韩日本欧美亚洲| 中国china体内裑精亚洲片| 亚洲精品国产精品国产自| 欧美理论片在线观看| 精品国产乱码久久久久酒店| 欧美视频国产精品| 欧美裸体视频网站| 成人免费看片视频| 亚洲美女在线视频| 亚洲精品欧美日韩专区| 国产日韩欧美成人| 久久久久久伊人| 亚洲精品资源美女情侣酒店| 国产精品黄页免费高清在线观看| 久久久精品视频成人| 国内精品国产三级国产在线专| www.色综合| 日韩电影中文 亚洲精品乱码| 精品国产一区二区三区久久狼黑人| 97视频在线观看免费高清完整版在线观看| 欧美精品在线免费| 97视频人免费观看| 91视频国产精品| 欧美黄色片免费观看| 欧美日本精品在线| 亚洲欧美日韩一区在线| 97超级碰碰人国产在线观看| 亚洲国产成人久久综合| 一区二区三区久久精品| 日韩免费黄色av| 亚洲欧洲高清在线| 久久精视频免费在线久久完整在线看| 国产精品久久久久久久久久久久| 日韩精品中文字幕久久臀| 国产精品第一页在线| 欧美精品在线观看91| 日韩在线视频一区| 成人av在线天堂| 日韩精品亚洲精品| 国产在线观看精品| 国产亚洲一区二区精品| 9.1国产丝袜在线观看| 欧美裸体xxxx极品少妇软件| 日本精品久久久久久久| xxx成人少妇69| 欧美尤物巨大精品爽| 美乳少妇欧美精品| 伊人伊成久久人综合网小说| 成人黄色免费看| 亚洲国产精品福利| 精品久久久久久中文字幕大豆网| 国产91成人video| 在线精品视频视频中文字幕| 成人av在线天堂| 68精品国产免费久久久久久婷婷| 亚洲精品资源美女情侣酒店| 51精品国产黑色丝袜高跟鞋| 欧美超级乱淫片喷水| 一区二区成人精品| 亚洲а∨天堂久久精品9966| 欧美午夜精品在线| 亚洲免费成人av电影| 午夜精品久久久99热福利| 欧美极品少妇xxxxⅹ喷水| 日韩av手机在线观看| 国产一区二区欧美日韩| 国产精品免费小视频| 国产精品亚洲网站| 美女啪啪无遮挡免费久久网站| 亚洲精品aⅴ中文字幕乱码| 91在线观看免费高清完整版在线观看| 日韩在线一区二区三区免费视频| 日韩在线免费视频| 96国产粉嫩美女| 久久久电影免费观看完整版| 国产精品久久国产精品99gif| 亚洲精品国产精品乱码不99按摩| 欧美大人香蕉在线| 亚洲欧美第一页| 亚洲免费人成在线视频观看| 国产精品久久久久高潮| 中文字幕一区二区精品| 欧美猛交ⅹxxx乱大交视频| 色偷偷av亚洲男人的天堂| 亚洲天堂免费视频| xxxx欧美18另类的高清| 亚洲欧美激情在线视频| 久久99精品久久久久久琪琪| 精品国产一区二区三区久久| 亚洲jizzjizz日本少妇| 亚洲国产精品久久久久久| 色爱精品视频一区| 精品国产成人av| 亚洲第一福利在线观看| 久久精品夜夜夜夜夜久久| 欧美成人中文字幕在线| 久久免费精品视频| 国产情人节一区| 国产精品女人久久久久久| 欧美乱大交做爰xxxⅹ性3| 亚洲成人性视频| 日韩中文字幕精品| 精品成人69xx.xyz| 亚洲大胆人体视频| 日韩性xxxx爱| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人免费全部观看天天性色| 亚洲精品一区久久久久久| xxx成人少妇69| 97国产精品视频人人做人人爱| 欧美午夜精品久久久久久浪潮| 中文字幕亚洲无线码在线一区| 97在线日本国产| 国语自产精品视频在线看抢先版图片| 欧美激情性做爰免费视频| 成人精品网站在线观看| 97视频在线观看成人| 日韩麻豆第一页| 国产aaa精品| 日韩美女写真福利在线观看| 日本成人激情视频| www.久久草.com| 久久精品国亚洲| 国产欧美在线看| 成人国产亚洲精品a区天堂华泰| 欧美日韩电影在线观看| 亚洲国产成人久久| 欧美成人h版在线观看| 日韩一区av在线| 欧洲成人免费视频| www.亚洲成人| 91精品国产综合久久香蕉| 欧美性xxxx极品hd欧美风情| 国产精品91久久久| 亚洲网站在线播放| 欧美黄色小视频| 日韩电影中文 亚洲精品乱码| 欧美影院久久久| 在线亚洲午夜片av大片| 亚洲最大的av网站| 亚洲精品wwwww| 精品国产乱码久久久久久天美| 欧美在线视频一二三| 欧美成人精品在线播放| 国产精品偷伦视频免费观看国产| 黑人巨大精品欧美一区二区| 国产精品视频在线观看| 国产精品国产亚洲伊人久久| 色综合视频网站| 精品久久久91| 亚洲综合日韩中文字幕v在线| 欧美激情网友自拍| 亚洲国产高清自拍| 庆余年2免费日韩剧观看大牛| 久久成人国产精品| 91日韩在线视频| 美女av一区二区三区| 日韩精品免费看| 久久久久久久久久久免费| 亚洲免费视频一区二区| 久久大大胆人体|