国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

關(guān)于PHP基于yii框架實現(xiàn)生成ICO圖標(biāo)的代碼解析

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

1,phpthumb_ico 是生成ICO圖標(biāo)的類,源碼如下

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圖標(biāo) * @author flashalliance public function actionIco() { $this- breadcrumbs=array_merge($this- breadcrumbs,array( ICO圖標(biāo)制作  $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圖標(biāo) /title  meta http-equiv= Content-Type content= text/html; charset=utf-8 /  /head  body  p >

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

關(guān)于Yii框架中sphinx索引配置的分析

關(guān)于yii2中使用webuploader實現(xiàn)圖片上傳的代碼

以上就是關(guān)于PHP基于yii框架實現(xiàn)生成ICO圖標(biāo)的代碼解析的詳細(xì)內(nèi)容,PHP教程

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁波市| 长春市| 南华县| 饶平县| 桑日县| 游戏| 鹿泉市| 松阳县| 桓仁| 南涧| 寿阳县| 莱西市| 漳州市| 河池市| 兴安县| 琼结县| 马尔康县| 天峻县| 南部县| 萝北县| 宝清县| 陇南市| 罗田县| 辽宁省| 徐州市| 广安市| 垦利县| 鄱阳县| 昆明市| 锦屏县| 麻阳| 岚皋县| 阜康市| 瓦房店市| 凤城市| 玛多县| 厦门市| 随州市| 随州市| 辽宁省| 赤峰市|