用phpqrcode生成帶logo二維碼, 需注意幾點,不注意是要進坑的哦.
阿新 • • 發佈:2018-11-30
先附上程式碼:
include '../vendor/phpqrcode/phpqrcode.php'; $value = 'http://127.0.0.1/txw1958/'; //二維碼內容 $errorCorrectionLevel = 'L';//容錯級別 $matrixPointSize = 6;//生成圖片大小 //生成二維碼圖片 QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2); $logo = 'logo.png';//準備好的logo圖片 $QR = 'qrcode.png';//已經生成的原始二維碼圖 if ($logo !== FALSE) { $QR = imagecreatefromstring(file_get_contents($QR)); $logo = imagecreatefromstring(file_get_contents($logo)); $QR_width = imagesx($QR);//二維碼圖片寬度 $QR_height = imagesy($QR);//二維碼圖片高度 $logo_width = imagesx($logo);//logo圖片寬度 $logo_height = imagesy($logo);//logo圖片高度 $logo_qr_width = $QR_width / 5; $scale = $logo_width/$logo_qr_width; $logo_qr_height = $logo_height/$scale; $from_width = ($QR_width - $logo_qr_width) / 2; //重新組合圖片並調整大小 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); } //輸出圖片 imagepng($QR, 'hellologo.png'); echo '<img src="hellologo.png">';
但是生成的二維碼圖片上的logo圖片變成了黑白色, 嗯嗯, 準確的來說與原logo圖片發生了極大的色差,納悶了好久,還以為這種方式生成的logo二維碼就是不帶顏色的, 但是試著換了張圖片,卻沒有這樣的問題, 這讓我更納悶了,研究了許久, 終於找到原因:
因為我用的logo圖片是從遠端down下來的的影象, 根據資料所示, 這種影象也就是所謂truecolor的影象。而png是所謂的調色盤影象,
需要先將 logo變成調色盤影象,才能在copy時不丟失 顏色資訊
程式碼如下:
$logo = imagecreatefromstring(file_get_contents($logo)); if (imageistruecolor($logo)) imagetruecolortopalette($logo, false, 65535); // 新加這行程式碼即可。