여기서는 yii 프레임워크를 사용하고 있습니다.
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) ? 32 : 24; $totalcolors[$key] = ImageColorsTotal($gd_image); $icXOR[$key] = ''; for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) { for ($x = 0; $x 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 $scanlinemaskbits) { for ($i = 0; $i $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);// LONGbiHeight; $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 class="col-md-12"> <p class="form-horizontal panel panel-default margin-t-10 b-img"> <p class="panel-heading"> <p class="pull-left"> <span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"> </span>在线制作ICO图标</p> <p class="clearfix"></p> </p> <?php $form = $this->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 ) ); ?> <p class="form-group"> <label class="col-lg-2 control-label">上传文件</label> <p class="col-md-5"> <p class="col-md-6"> <input id="upimage" type="file" name="upimage" class="hidden"> <input id="tmp_file" class="form-control" type="text"> </p> <p class="col-md-6"> <a class="btn btn-default" onclick="$('input[id=upimage]').click();">选择文件</a></p> </p> </p> <p class="form-group"> <label class="col-lg-2 text-right">选择尺寸</label> <p 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> </p> </p> <p class="form-group"> <label class="col-lg-2 text-right">支持格式</label> <p class="col-lg-5"> png,jpg,gif </p> </p> <p class="list_back"> <input type="submit" value="生 成" class="btn btn-success"> </p> </p> <?php $this->endWidget(); ?> <?php if(!empty($errors) or !empty($output)):?> <p class="form-horizontal panel panel-default margin-t-10 b-img"> <p class="panel-heading margin-b-10"> <p class="pull-left"> <span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"> </span>生成结果</p> <p class="clearfix"></p> </p> <?php if(!empty($errors)):?> <p class="form-group"> <label class="col-lg-2 text-right">生成失败</label> <p class="col-lg-5"> <?php foreach ($errors as $e):?> <?php echo $e;?><br> <?php endforeach;?> </p> </p> <?php endif;?> <?PHP if (!empty($output)):?> <?php $form = $this->beginWidget ( 'CActiveForm', array ( 'id' => 'ico-form', 'htmlOptions' => array ( 'id' => 'view_table', 'class' => 'add-form padding-10', ), 'action'=>'/tool/icoDownload', 'enableAjaxValidation' => false ) ); ?> <?php echo CHtml::hiddenField('filePath',$output);?> <p class="form-group"> <label class="col-lg-2 text-right">成功生成</label> <p class="col-lg-5"> <img src="/static/imghwm/default1.png" data-src="<?php echo $output;? alt="PHP는 phpthumb_ico 클래스 전체 예제를 사용하여 ICO 아이콘을 생성합니다." >" class="lazy" alt="在线制作ICO图标_favicon.ico" class="margin-r-10"> <input type="submit" value="立即下载" class="btn btn-sm btn-success margin-l-10"> </p> </p> <?php $this->endWidget(); ?> <?php endif;?> </p> <?php endif;?> </p> <!-- form -->
렌더링:
위에서는 파일 업로드 내용을 포함하여 phpthumb_ico 클래스를 사용하여 PHP로 ICO 아이콘을 생성하는 완전한 예를 소개합니다. PHP 튜토리얼에 관심이 있습니다.

phpsession 실패 이유에는 구성 오류, 쿠키 문제 및 세션 만료가 포함됩니다. 1. 구성 오류 : 올바른 세션을 확인하고 설정합니다. 2. 쿠키 문제 : 쿠키가 올바르게 설정되어 있는지 확인하십시오. 3. 세션 만료 : 세션 시간을 연장하기 위해 세션을 조정합니다 .GC_MAXLIFETIME 값을 조정하십시오.

PHP에서 세션 문제를 디버그하는 방법 : 1. 세션이 올바르게 시작되었는지 확인하십시오. 2. 세션 ID의 전달을 확인하십시오. 3. 세션 데이터의 저장 및 읽기를 확인하십시오. 4. 서버 구성을 확인하십시오. 세션 ID 및 데이터를 출력, 세션 파일 컨텐츠보기 등을 통해 세션 관련 문제를 효과적으로 진단하고 해결할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

SESSION.GC_MAXLIFETIME 및 SESSION.COOKIE_LIFETIME을 설정하여 PHP에서 세션 수명을 구성 할 수 있습니다. 1) SESSION.GC_MAXLIFETIME 서버 측 세션 데이터의 생존 시간을 제어합니다. 2) 세션 .Cookie_Lifetime 클라이언트 쿠키의 수명주기를 제어합니다. 0으로 설정하면 브라우저가 닫히면 쿠키가 만료됩니다.

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
