关于如何选图片格式 (taobao ued)

2020-02-07 23:42栏目:bob体育平台
TAG:

1,phpthumb_ico 是生成ICO图标的类,源码如下

关于怎么着选图片格式

class phpthumb_ico { function phpthumb_ico() { return true; } function GD2ICOstring { foreach ($gd_image_array as $key => $gd_image) { $ImageWidths[$key] = ImageSX; $ImageHeights[$key] = ImageSY; $bpp[$key] = ImageIsTrueColor ? 32 : 24; $totalcolors[$key] = ImageColorsTotal; $icXOR[$key] = ''; for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) { for ($x = 0; $x < $ImageWidths[$key]; $x++) { $argb = $this->GetPixelColor; $a = round(255 * ( / 127)); $r = $argb['red']; $g = $argb['green']; $b = $argb['blue']; if  { $icXOR[$key] .= chr.chr; } elseif  { $icXOR[$key] .= chr; } if  { @$icANDmask[$key][$y] .= '1'; } else { @$icANDmask[$key][$y] .= '0'; } } // mask bits are 32-bit aligned per scanline while (strlen % 32) { $icANDmask[$key][$y] .= '0'; } } $icAND[$key] = ''; foreach ($icANDmask[$key] as $y => $scanlinemaskbits) { for ($i = 0; $i < strlen; $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] * ; // BITMAPINFOHEADER - 40 bytes $BitmapInfoHeader[$key] = ''; $BitmapInfoHeader[$key] .= "x28x00x00x00"; // 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] .= "x01x00"; // WORD biPlanes; $BitmapInfoHeader[$key] .= chr."x00"; // wBitCount; $BitmapInfoHeader[$key] .= "x00x00x00x00"; // DWORD biCompression; $BitmapInfoHeader[$key] .= $this->LittleEndian2String; // DWORD biSizeImage; $BitmapInfoHeader[$key] .= "x00x00x00x00"; // LONG biXPelsPerMeter; $BitmapInfoHeader[$key] .= "x00x00x00x00"; // LONG biYPelsPerMeter; $BitmapInfoHeader[$key] .= "x00x00x00x00"; // DWORD biClrUsed; $BitmapInfoHeader[$key] .= "x00x00x00x00"; // DWORD biClrImportant; } $icondata = "x00x00"; // idReserved; // Reserved  $icondata .= "x01x00"; // idType; // Resource Type  $icondata .= $this->LittleEndian2String(count; // idCount; // How many images? $dwImageOffset = 6 + (count * 16); foreach ($gd_image_array as $key => $gd_image) { // ICONDIRENTRY idEntries[1]; // An entry for each image  $icondata .= chr; // bWidth; // Width, in pixels, of the image $icondata .= chr; // bHeight; // Height, in pixels, of the image $icondata .= chr; // bColorCount; // Number of colors in image  $icondata .= "x00"; // bReserved; // Reserved  $icondata .= "x01x00"; // wPlanes; // Color Planes $icondata .= chr."x00"; // wBitCount; // Bits per pixel $dwBytesInRes = 40 + strlen + strlen; $icondata .= $this->LittleEndian2String; // dwBytesInRes; // How many bytes in this resource? $icondata .= $this->LittleEndian2String; // dwImageOffset; // Where in the file is this image? $dwImageOffset += strlen($BitmapInfoHeader[$key]); $dwImageOffset += strlen; $dwImageOffset += strlen; } foreach ($gd_image_array as $key => $gd_image) { $icondata .= $BitmapInfoHeader[$key]; $icondata .= $icXOR[$key]; $icondata .= $icAND[$key]; } return $icondata; } function LittleEndian2String { $intstring = ''; while  { $intstring = $intstring.chr; $number >>= 8; } return str_pad($intstring, $minbytes, "x00", STR_PAD_RIGHT); } function GetPixelColor { if  { return false; } return @ImageColorsForIndex($img, @ImageColorAt; } }

Yii::$enableIncludePath = false;Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );

是因为PNG正是为代表GIF而生的,而且PNG的压缩算法也要优化GIF,所以大器晚成旦不是需求动漫效果的地点刚烈建议都采取PNG格式图片。

化解生成藤黄背景的标题

JPG不适用于所含颜色相当少、具备大块颜色周围的区域或亮度差距极其让人瞩指标较轻便的图形。

image阿尔法blending;//不统少年老成颜色,直接用$im图像颜色替换,包含透明色imagesave阿尔法;//不要丢了$resize_im图像的透明色完整方法:

据书上说资历大家在页面中使用的物品图片、接受人像恐怕实物质资源料制作的广告Banner等图像更合乎利用JPG的图片格式保存。

/** * icoMaker 在线生成ICO图标 * @author flashalliance */ public function actionIco() { $this->breadcrumbs=array_merge($this->breadcrumbs,array; $output = ""; $errors=array(); if(isset&&$_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{ $errors[]="图像格式错误!"; } if{ switch{ case 1; $resize_im = @imagecreatetruecolor; $size = 16; break; case 2; $resize_im = @imagecreatetruecolor; $size = 32; break; case 3; $resize_im = @imagecreatetruecolor; $size = 48; break; default; $resize_im = @imagecreatetruecolor; $size = 32; break; } imagesavealpha; imagealphablending;//不合并颜色,直接用$im图像颜色替换,包括透明色 imagesavealpha;//不要丢了$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; $icon_data = $icon->GD2ICOstring; $bas_path=dirname ->BasePath ); $bas_new_path=$bas_path.'/upload/ico/'; if(!is_dir{ mkdir($bas_new_path, 0777, true); } $filePath=$bas_new_path. date. rand . ".ico"; if(file_put_contents($filePath, $icon_data)){ $output = str_replace($bas_path,'',$filePath); } } }else{ $errors[]="生成错误请重试!"; } } } $this->render ( 'ico',array('output'=>$output,'errors'=>$errors)); }

   在线制作ICO图标  beginWidget ( 'CActiveForm', array ( 'id' => 'ico-form', 'htmlOptions' => array ( 'id' => 'view_table', 'class' => 'add-form padding-10', 'enctype'=>'multipart/form-data' ), 'action'=>'/tool/ico?action=make', 'enableAjaxValidation' => false) );?>  上传文件      选择文件    选择尺寸    16*16    32*32    48*48     支持格式  png,jpg,gif      endWidget(); ?>   生成结果     生成失败   
      beginWidget ( 'CActiveForm', array ( 'id' => 'ico-form', 'htmlOptions' => array ( 'id' => 'view_table', 'class' => 'add-form padding-10', ), 'action'=>'/tool/icoDownload', 'enableAjaxValidation' => false ) ); ?>   成功生成      endWidget(); ?>  

富有以下法规的图像更切合用PNG8格式进行仓库储存:

再给我们享用一个单独的类

  1. 1、图像上颜色少之甚少,何况首要以纯色只怕平滑的渐变色实行填空。
  2. 2、具备十分大亮度差别以致刚毅相比的简洁明了图像(如“立刻购买”开关中的背景和文字)。
  3.  
  4. 诚如档期的顺序丰盛颜色很多的图像采取JPG存款和储蓄,而颜色容易比较刚强的则必要利用PNG。但也许有生龙活虎对非正规意况,比如某些图像就算色彩等级次序丰盛,但由于图片尺寸十分的小,下面包蕴的颜色数量有限期,也足以品味用PNG实行仓库储存。

phpthumb.ico.php

再有二个标准正是用来页面结构的宗旨视觉成分,如容器的背景、按键、导航的背景等相应尽量用PNG格式举办仓库储存,那样才干更加好的保证规划品质。而别的部分内容成分,如广告Banner、商品图片等对品质供给不是专程苛刻的,则能够用JPG去进行仓库储存进而收缩文件大小。

 // // available at http://phpthumb.sourceforge.net /// ////////////////////////////////////////////////////////////// /// // // phpthumb.ico.php - .ICO output format functions // // /// ////////////////////////////////////////////////////////////// class phpthumb_ico { function phpthumb_ico() { return true; } function GD2ICOstring { foreach ($gd_image_array as $key => $gd_image) { $ImageWidths[$key] = ImageSX; $ImageHeights[$key] = ImageSY; $bpp[$key] = ImageIsTrueColor ? 32 : 24; $totalcolors[$key] = ImageColorsTotal; $icXOR[$key] = ''; for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) { for ($x = 0; $x < $ImageWidths[$key]; $x++) { $argb = $this->GetPixelColor; $a = round(255 * ( / 127)); $r = $argb['red']; $g = $argb['green']; $b = $argb['blue']; if  { $icXOR[$key] .= chr.chr; } elseif  { $icXOR[$key] .= chr; } if  { @$icANDmask[$key][$y] .= '1'; } else { @$icANDmask[$key][$y] .= '0'; } } // mask bits are 32-bit aligned per scanline while (strlen % 32) { $icANDmask[$key][$y] .= '0'; } } $icAND[$key] = ''; foreach ($icANDmask[$key] as $y => $scanlinemaskbits) { for ($i = 0; $i < strlen; $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] * ; // 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."/x00"; // wBitCount; $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00"; // DWORD biCompression; $BitmapInfoHeader[$key] .= $this->LittleEndian2String; // 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  $icondata .= "/x01/x00"; // idType; // Resource Type  $icondata .= $this->LittleEndian2String(count; // idCount; // How many images? $dwImageOffset = 6 + (count * 16); foreach ($gd_image_array as $key => $gd_image) { // ICONDIRENTRY idEntries[1]; // An entry for each image  $icondata .= chr; // bWidth; // Width, in pixels, of the image $icondata .= chr; // bHeight; // Height, in pixels, of the image $icondata .= chr; // bColorCount; // Number of colors in image  $icondata .= "/x00"; // bReserved; // Reserved  $icondata .= "/x01/x00"; // wPlanes; // Color Planes $icondata .= chr."/x00"; // wBitCount; // Bits per pixel $dwBytesInRes = 40 + strlen + strlen; $icondata .= $this->LittleEndian2String; // dwBytesInRes; // How many bytes in this resource? $icondata .= $this->LittleEndian2String; // dwImageOffset; // Where in the file is this image? $dwImageOffset += strlen($BitmapInfoHeader[$key]); $dwImageOffset += strlen; $dwImageOffset += strlen; } foreach ($gd_image_array as $key => $gd_image) { $icondata .= $BitmapInfoHeader[$key]; $icondata .= $icXOR[$key]; $icondata .= $icAND[$key]; } return $icondata; } function LittleEndian2String { $intstring = ''; while  { $intstring = $intstring.chr; $number >>= 8; } return str_pad($intstring, $minbytes, "/x00", STR_PAD_RIGHT); } function GetPixelColor { if  { return false; } return @ImageColorsForIndex($img, @ImageColorAt; } } ?>

 ico图标  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{ echo "图形格式错误!"; } switch{ case 1; $resize_im = @imagecreatetruecolor; $size = 16; break; case 2; $resize_im = @imagecreatetruecolor; $size = 32; break; case 3; $resize_im = @imagecreatetruecolor; $size = 48; break; default; $resize_im = @imagecreatetruecolor; $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; $icon_data = $icon->GD2ICOstring; $filename = "temp/".date.rand.".ico"; if(file_put_contents($filename, $icon_data)){ $output = "生成成功!请点右键->另存为 保存到本地
点击下载"; } }else{ echo "生成错误请重试!"; } } } ?>  

附录-Photoshop中各个参数的含义及安装技艺

PNG8的参数设置

图片 1

减少颜色深浅算法与颜色

点名用于转移颜色查找表的方法,以致想要在颜色查找表中使用的水彩数量。可以接收以下减低颜色深浅算法之风流倜傥:

  1. 1、可感知:通过为人眼相比较灵活的颜色赋以优先权来成立自定颜色表。
  2. 2、可选择:创设一个颜色表,此表与”可感知”颜色表相近,但对大规模的颜色区域和封存 Web 颜色有利。此颜色表经常会变卦具备最大颜色完整性的图像。“可接收”是暗中认可选项。
  3. 3、随样性:通过从图像的要紧色谱中提取色样来创立自定颜色表。比如,只包含米黄和灰褐的图像发生至关心尊敬要由铁锈色和黛青构成的颜色表。大许多图像的颜料集中在色谱的一定区域。
  4. 4、受限 (Web):使用 Windows 和 Mac OS 8 位(256 色)调板通用的正经八百 216 色颜色表。该选项保险当使用 8 位颜色展现图像时,不会对颜色应用浏览器仿色。(该调板也叫做 Web 安全调板。) 使用 Web 调板恐怕会创设相当的大的文书,因而,只有当制止浏览器仿色是先行思谋的因素时,才提议接收该选项。
  5. 5、自定:使用客户成立或改造的调色板。借使展开现存的 GIF 或 PNG-8 文件,它将兼具自定调色板。使用”存款和储蓄为 Web 和装置所用格式”对话框中的”颜色表”调板可自定颜色查找表。
  6. 6、黑白、灰度、Mac OS、Windows使用风华正茂组调色板。

建议:日常意况下私下认可选项“可接收”项就可以。

图片 2

仿色方法和仿色

规定应用程序仿色的办法和数据。”仿色”是指模拟Computer的水彩展现系统中未提供的颜料的主意。

较高的仿色百分比使图像中冒出越来越多的水彩和更多的底细,但相同的时间也会附Gavin件大小。为了拿到最棒压缩比,请使用可提供所需颜色细节的最低百分比的仿色。

若图像所包罗的颜色主假若纯色,则在不应用仿色时常常也能符合规律显示。富含三番四次色调(特别是颜色渐变)的图像,恐怕必要仿色以制止出现颜色条带现象。

还不错以下三种仿色方法之黄金年代:

  1. 1、扩散:应用与”图案”仿色相比较平时不太显眼的专擅图案。仿色效果在周围像素间扩散。
  2. 2、图案:使用肖似半调的方形图案模拟颜色表中从未的此外颜色。
  3. 3、杂色:应用与”扩散”仿色方法常常的放肆图案,但不在相邻像素间扩散图案。使用”杂色”仿色方法时不会现出接缝。

建议:雷同只在图片颜色过多产生失真的图景下才要求选取仿色。提出选取扩散仿色,能够确切调弄整理仿色的百分比以高达最好的作用。仿色度越高文件大小也越大。

图片 3

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:关于如何选图片格式 (taobao ued)