So erstellen Sie eine QR-Code-Klasse mit Logo über PHP
In diesem Artikel wird erläutert, wie Sie eine QR-Code-Klasse in PHP erstellen, die das Festlegen der Größe, das Hinzufügen von Logos, Strichen, abgerundeten Ecken, Transparenz und andere Verarbeitungsschritte unterstützt. Vollständiger Code, Demonstrationsbeispiele und detaillierte Parameterbeschreibungen werden bereitgestellt, um das Lernen und die Verwendung für alle zu erleichtern.
Die Funktionen sind wie folgt:
1. Einen QR-Code erstellen
2. Das Logo kann nachgezeichnet werden
4. Das Logo kann abgerundete Ecken haben
5. Die Transparenz des Logos kann eingestellt werden
6. Das Logobild und der Ausgabebildtyp unterstützen die Formate PNG, JPG, GIF
7. Die Ausgabebildqualität kann eingestellt werden
ecc QR-Codequalität L-kleinster, M, Q , H-best
Größe QR-Codegröße 1-50
dest_file Generierter QR-Code-Bildpfad
Qualität Generierte Bildqualität
Logo Logopfad, leer bedeutet, dass kein Logo hinzugefügt wird
logo_size Logogröße, null bedeutet automatisch berechnet im Verhältnis zur Größe des QR-Codes
logo_outline_size Logo-Strichgröße, null bedeutet automatisch berechnet im Verhältnis zum Logo Größe
logo_outline_color Logo-Umrissfarbe
logo_opacity Logo-Deckkraft 0-100
logo_radius Logo-Abrundungswinkel 0-30
Der Code lautet wie folgt:
PHPQRCode.class.php
<?phprequire_once dirname(__FILE__)."/qrcode/qrlib.php";/** * PHP创建二维码类 * Date: 2018-03-18 * Author: fdipzone * Version: 1.0 * * Description: * PHP实现创建二维码类,支持设置尺寸,加入LOGO,圆角,透明度,等处理。 * * Func: * public set_config 设定配置 * public generate 创建二维码 * private create_qrcode 创建纯二维码图片 * private add_logo 合拼纯二维码图片与logo图片 * private image_outline 图片对象进行描边 * private image_fillet 图片对象进行圆角处理 * private imagecopymerge_alpha 合拼图片并保留各自透明度 * private create_dirs 创建目录 * private hex2rgb hex颜色转rgb颜色 * private get_file_ext 获取图片类型 */class PHPQRCode{ // class start /** 默认设定 */ private $_config = array( 'ecc' => 'H', // 二维码质量 L-smallest, M, Q, H-best 'size' => 15, // 二维码尺寸 1-50 'dest_file' => 'qrcode.png', // 创建的二维码路径 'quality' => 100, // 图片质量 'logo' => '', // logo路径,为空表示没有logo 'logo_size' => null, // logo尺寸,null表示按二维码尺寸比例自动计算 'logo_outline_size' => null, // logo描边尺寸,null表示按logo尺寸按比例自动计算 'logo_outline_color' => '#FFFFFF', // logo描边颜色 'logo_opacity' => 100, // logo不透明度 0-100 'logo_radius' => 0, // logo圆角角度 0-30 ); /** * 设定配置 * @param Array $config 配置内容 */ public function set_config($config){ // 允许设定的配置 $config_keys = array_keys($this->_config); // 获取传入的配置,写入设定 foreach($config_keys as $k=>$v){ if(isset($config[$v])){ $this->_config[$v] = $config[$v]; } } } /** * 创建二维码 * @param String $data 二维码内容 * @return String */ public function generate($data){ // 创建临时二维码图片 $tmp_qrcode_file = $this->create_qrcode($data); // 合拼临时二维码图片与logo图片 $this->add_logo($tmp_qrcode_file); // 删除临时二维码图片 if($tmp_qrcode_file!='' && file_exists($tmp_qrcode_file)){ unlink($tmp_qrcode_file); } return file_exists($this->_config['dest_file'])? $this->_config['dest_file'] : ''; } /** * 创建临时二维码图片 * @param String $data 二维码内容 * @return String */ private function create_qrcode($data){ // 临时二维码图片 $tmp_qrcode_file = dirname(__FILE__).'/tmp_qrcode_'.time().mt_rand(100,999).'.png'; // 创建临时二维码 QRcode::png($data, $tmp_qrcode_file, $this->_config['ecc'], $this->_config['size'], 2); // 返回临时二维码路径 return file_exists($tmp_qrcode_file)? $tmp_qrcode_file : ''; } /** * 合拼临时二维码图片与logo图片 * @param String $tmp_qrcode_file 临时二维码图片 */ private function add_logo($tmp_qrcode_file){ // 创建目标文件夹 $this->create_dirs(dirname($this->_config['dest_file'])); // 获取目标图片的类型 $dest_ext = $this->get_file_ext($this->_config['dest_file']); // 需要加入logo if(file_exists($this->_config['logo'])){ // 创建临时二维码图片对象 $tmp_qrcode_img = imagecreatefrompng($tmp_qrcode_file); // 获取临时二维码图片尺寸 list($qrcode_w, $qrcode_h, $qrcode_type) = getimagesize($tmp_qrcode_file); // 获取logo图片尺寸及类型 list($logo_w, $logo_h, $logo_type) = getimagesize($this->_config['logo']); // 创建logo图片对象 switch($logo_type){ case 1: $logo_img = imagecreatefromgif($this->_config['logo']); break; case 2: $logo_img = imagecreatefromjpeg($this->_config['logo']); break; case 3: $logo_img = imagecreatefrompng($this->_config['logo']); break; default: return ''; } // 设定logo图片合拼尺寸,没有设定则按比例自动计算 $new_logo_w = isset($this->_config['logo_size'])? $this->_config['logo_size'] : (int)($qrcode_w/5); $new_logo_h = isset($this->_config['logo_size'])? $this->_config['logo_size'] : (int)($qrcode_h/5); // 按设定尺寸调整logo图片 $new_logo_img = imagecreatetruecolor($new_logo_w, $new_logo_h); imagecopyresampled($new_logo_img, $logo_img, 0, 0, 0, 0, $new_logo_w, $new_logo_h, $logo_w, $logo_h); // 判断是否需要描边 if(!isset($this->_config['logo_outline_size']) || $this->_config['logo_outline_size']>0){ list($new_logo_img, $new_logo_w, $new_logo_h) = $this->image_outline($new_logo_img); } // 判断是否需要圆角处理 if($this->_config['logo_radius']>0){ $new_logo_img = $this->image_fillet($new_logo_img); } // 合拼logo与临时二维码 $pos_x = ($qrcode_w-$new_logo_w)/2; $pos_y = ($qrcode_h-$new_logo_h)/2; imagealphablending($tmp_qrcode_img, true); // 合拼图片并保留各自透明度 $dest_img = $this->imagecopymerge_alpha($tmp_qrcode_img, $new_logo_img, $pos_x, $pos_y, 0, 0, $new_logo_w, $new_logo_h, $this->_config['logo_opacity']); // 生成图片 switch($dest_ext){ case 1: imagegif($dest_img, $this->_config['dest_file'], $this->_config['quality']); break; case 2: imagejpeg($dest_img, $this->_config['dest_file'], $this->_config['quality']); break; case 3: imagepng($dest_img, $this->_config['dest_file'], (int)(($this->_config['quality']-1)/10)); break; } // 不需要加入logo }else{ $dest_img = imagecreatefrompng($tmp_qrcode_file); // 生成图片 switch($dest_ext){ case 1: imagegif($dest_img, $this->_config['dest_file'], $this->_config['quality']); break; case 2: imagejpeg($dest_img, $this->_config['dest_file'], $this->_config['quality']); break; case 3: imagepng($dest_img, $this->_config['dest_file'], (int)(($this->_config['quality']-1)/10)); break; } } } /** * 对图片对象进行描边 * @param Obj $img 图片对象 * @return Array */ private function image_outline($img){ // 获取图片宽高 $img_w = imagesx($img); $img_h = imagesy($img); // 计算描边尺寸,没有设定则按比例自动计算 $bg_w = isset($this->_config['logo_outline_size'])? intval($img_w + $this->_config['logo_outline_size']) : $img_w + (int)($img_w/5); $bg_h = isset($this->_config['logo_outline_size'])? intval($img_h + $this->_config['logo_outline_size']) : $img_h + (int)($img_h/5); // 创建底图对象 $bg_img = imagecreatetruecolor($bg_w, $bg_h); // 设置底图颜色 $rgb = $this->hex2rgb($this->_config['logo_outline_color']); $bgcolor = imagecolorallocate($bg_img, $rgb['r'], $rgb['g'], $rgb['b']); // 填充底图颜色 imagefill($bg_img, 0, 0, $bgcolor); // 合拼图片与底图,实现描边效果 imagecopy($bg_img, $img, (int)(($bg_w-$img_w)/2), (int)(($bg_h-$img_h)/2), 0, 0, $img_w, $img_h); $img = $bg_img; return array($img, $bg_w, $bg_h); } /** * 对图片对象进行圆角处理 * @param Obj $img 图片对象 * @return Obj */ private function image_fillet($img){ // 获取图片宽高 $img_w = imagesx($img); $img_h = imagesy($img); // 创建圆角图片对象 $new_img = imagecreatetruecolor($img_w, $img_h); // 保存透明通道 imagesavealpha($new_img, true); // 填充圆角图片 $bg = imagecolorallocatealpha($new_img, 255, 255, 255, 127); imagefill($new_img, 0, 0, $bg); // 圆角半径 $r = $this->_config['logo_radius']; // 执行圆角处理 for($x=0; $x<$img_w; $x++){ for($y=0; $y<$img_h; $y++){ $rgb = imagecolorat($img, $x, $y); // 不在图片四角范围,直接画图 if(($x>=$r && $x<=($img_w-$r)) || ($y>=$r && $y<=($img_h-$r))){ imagesetpixel($new_img, $x, $y, $rgb); // 在图片四角范围,选择画图 }else{ // 上左 $ox = $r; // 圆心x坐标 $oy = $r; // 圆心y坐标 if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) <= ($r*$r) ){ imagesetpixel($new_img, $x, $y, $rgb); } // 上右 $ox = $img_w-$r; // 圆心x坐标 $oy = $r; // 圆心y坐标 if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) <= ($r*$r) ){ imagesetpixel($new_img, $x, $y, $rgb); } // 下左 $ox = $r; // 圆心x坐标 $oy = $img_h-$r; // 圆心y坐标 if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) <= ($r*$r) ){ imagesetpixel($new_img, $x, $y, $rgb); } // 下右 $ox = $img_w-$r; // 圆心x坐标 $oy = $img_h-$r; // 圆心y坐标 if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) <= ($r*$r) ){ imagesetpixel($new_img, $x, $y, $rgb); } } } } return $new_img; } // 合拼图片并保留各自透明度 private function imagecopymerge_alpha($dest_img, $src_img, $pos_x, $pos_y, $src_x, $src_y, $src_w, $src_h, $opacity){ $w = imagesx($src_img); $h = imagesy($src_img); $tmp_img = imagecreatetruecolor($src_w, $src_h); imagecopy($tmp_img, $dest_img, 0, 0, $pos_x, $pos_y, $src_w, $src_h); imagecopy($tmp_img, $src_img, 0, 0, $src_x, $src_y, $src_w, $src_h); imagecopymerge($dest_img, $tmp_img, $pos_x, $pos_y, $src_x, $src_y, $src_w, $src_h, $opacity); return $dest_img; } /** * 创建目录 * @param String $path * @return Boolean */ private function create_dirs($path){ if(!is_dir($path)){ return mkdir($path, 0777, true); } return true; } /** hex颜色转rgb颜色 * @param String $color hex颜色 * @return Array */ private function hex2rgb($hexcolor){ $color = str_replace('#', '', $hexcolor); if (strlen($color) > 3) { $rgb = array( 'r' => hexdec(substr($color, 0, 2)), 'g' => hexdec(substr($color, 2, 2)), 'b' => hexdec(substr($color, 4, 2)) ); } else { $r = substr($color, 0, 1) . substr($color, 0, 1); $g = substr($color, 1, 1) . substr($color, 1, 1); $b = substr($color, 2, 1) . substr($color, 2, 1); $rgb = array( 'r' => hexdec($r), 'g' => hexdec($g), 'b' => hexdec($b) ); } return $rgb; } /** 获取图片类型 * @param String $file 图片路径 * @return int */ private function get_file_ext($file){ $filename = basename($file); list($name, $ext)= explode('.', $filename); $ext_type = 0; switch(strtolower($ext)){ case 'jpg': case 'jpeg': $ext_type = 2; break; case 'gif': $ext_type = 1; break; case 'png': $ext_type = 3; break; } return $ext_type; } } // class end?>
demo.php
<?phprequire 'PHPQRCode.class.php';$config = array( 'ecc' => 'H', // L-smallest, M, Q, H-best 'size' => 12, // 1-50 'dest_file' => 'qrcode.png', 'quality' => 90, 'logo' => 'logo.jpg', 'logo_size' => 100, 'logo_outline_size' => 20, 'logo_outline_color' => '#FFFF00', 'logo_radius' => 15, 'logo_opacity' => 100, );// 二维码内容$data = 'http://weibo.com/fdipzone';// 创建二维码类$oPHPQRCode = new PHPQRCode();// 设定配置$oPHPQRCode->set_config($config);// 创建二维码$qrcode = $oPHPQRCode->generate($data);// 显示二维码echo '<img src="/static/imghw/default1.png" data-src="'.$qrcode.'?t='.time().'" class="lazy" alt="So erstellen Sie eine QR-Code-Klasse mit Logo über PHP" >';?>
Generiertes QR-Code-Bild:
Detaillierte Erläuterung der MySQL-bezogenen Methoden zum Neuerstellen von Tabellenpartitionen und zum Speichern von Daten
Über PHP funktioniert json_encode unterstützt keine Objekte. Erklärung privater Attribute
Erklärung, wie PHP eindeutige RequestID-Klasseninhalte generiert
Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine QR-Code-Klasse mit Logo über PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
