1. 程式人生 > >用phpqrcode生成帶logo二維碼, 需注意幾點,不注意是要進坑的哦.

用phpqrcode生成帶logo二維碼, 需注意幾點,不注意是要進坑的哦.

先附上程式碼:

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); // 新加這行程式碼即可。