2013-07-31 93 views
0

当使用phpqrcode时,有没有办法让生成的qr代码的背景透明?phpqrcode透明背景

我正在生成一个PNG到磁盘。

我发现this,但我认为这是方式已经过时:

线在该论坛建议是

ImageColorTransparent($target_image, $col); 

但它是我不清楚它应该去,如果连意思与当前版本的代码一起工作。

<?php 
/* 
* PHP QR Code encoder 
* 
* Image output of code using GD2 
* 
* PHP QR Code is distributed under LGPL 3 
* Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm> 
* 
* This library is free software; you can redistribute it and/or 
* modify it under the terms of the GNU Lesser General Public 
* License as published by the Free Software Foundation; either 
* version 3 of the License, or any later version. 
* 
* This library is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
* Lesser General Public License for more details. 
* 
* You should have received a copy of the GNU Lesser General Public 
* License along with this library; if not, write to the Free Software 
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 
*/ 

    define('QR_IMAGE', true); 

    class QRimage { 

    //---------------------------------------------------------------------- 
    public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) 
    { 
     $image = self::image($frame, $pixelPerPoint, $outerFrame); 

     if ($filename === false) { 
      Header("Content-type: image/png"); 
      ImagePng($image); 
     } else { 
      if($saveandprint===TRUE){ 
       ImagePng($image, $filename); 
       header("Content-type: image/png"); 
       ImagePng($image); 
      }else{ 
       ImagePng($image, $filename); 
      } 
     } 

     ImageDestroy($image); 
    } 

    //---------------------------------------------------------------------- 
    public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) 
    { 
     $image = self::image($frame, $pixelPerPoint, $outerFrame); 

     if ($filename === false) { 
      Header("Content-type: image/jpeg"); 
      ImageJpeg($image, null, $q); 
     } else { 
      ImageJpeg($image, $filename, $q);    
     } 

     ImageDestroy($image); 
    } 

    //---------------------------------------------------------------------- 
    private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) 
    { 
     $h = count($frame); 
     $w = strlen($frame[0]); 

     $imgW = $w + 2*$outerFrame; 
     $imgH = $h + 2*$outerFrame; 

     $base_image =ImageCreate($imgW, $imgH); 

     $col[0] = ImageColorAllocate($base_image,255,255,255); 
     $col[1] = ImageColorAllocate($base_image,0,0,0); 


     imagefill($base_image, 0, 0, $col[0]); 

     for($y=0; $y<$h; $y++) { 
      for($x=0; $x<$w; $x++) { 
       if ($frame[$y][$x] == '1') { 
        ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); 
       } 
      } 
     } 

     $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); 
     ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); 
     ImageDestroy($base_image); 

     return $target_image; 
    } 
    } 
+0

说着给插件开发者,他已经把它添加到这个问题增强名单,透明度将围绕很快... –

回答

1

在qrimage.php,插入以下行:

ImageColorTransparent($target_image, $col[0]); 

,如下图所示:

,这将导致为您解决问题。

ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); 
ImageColorTransparent($target_image, $col[0]); 
ImageDestroy($base_image); 
+0

边注:约90行,在函数'图像()' – Raptor