麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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 [email protected] // // 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教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九一免费国产 | 9丨九色丨国产 | 中文字幕在线网 | 鸳鸯谱在线观看高清 | 欧美一级淫片免费视频1 | 欧产日产国产精品v | 亚洲精品久久久久久久久久久 | 国产精品亚洲一区二区三区在线观看 | 精品小视频| 久久精品国产一区二区电影 | 狠狠操电影 | 久久久青| 黄片毛片一级 | 中文字幕在线观看免费 | 国产三级精品最新在线 | 精品国产1区2区3区 免费国产 | free国产hd老熟bbw | 久久99国产综合精品 | 亚洲婷婷日日综合婷婷噜噜噜 | 免费看成年人网站 | 国产一级一国产一级毛片 | 久久精品免费网站 | 一区二区久久精品66国产精品 | 热久久成人| 干色视频 | 欧美片一区二区 | 草妞视频 | 日韩大片在线永久观看视频网站免费 | 成熟女人特级毛片www免费 | av电影网在线观看 | 91精品国产乱码久久桃 | 黄片毛片一级 | 黄色高清av | 91中文在线观看 | 农村少妇吞精夜夜爽视频 | 久久激情小视频 | 久久综合福利 | 国产91九色 | 久久久精彩 | 五月激情久久 | 成人午夜免费av |