2011-12-29 4 views
4

enter image description hereは、我々は別の画像操作のためのimagickを使用して、最後に QR透かしを追加する要求を持っている

こんにちは、

のPHPのImagickライブラリでQRコードイメージを作成します。

が使用するすべてのPHPスニペットやライブラリあり、PHPで純粋に実装さ

、GD2以外は外部に依存:

今私はGD2ライブラリを使用していますPHP QR Code libraryを見つけることができますimagick作成するQRコード

+0

ImageMagickは、変換や変換と同じように画像描画にはあまり役に立ちません。 – mario

+0

私の経験では、ImageMagickはGDより多くの機能を持っていますが、PHPライブラリはほとんど文書化されていません。 – jantimon

+0

ちょっと見ていて、実際には「ボリューム感がある」(http://php.net/manual/en/book.imagick.php)が文書化されています。しかし、私は普及率が低いことと、最近追加されたことによりあまり使われていないと考えています。 GDは少なくとも[PHP2](http://www.php.net/manual/phpfi2.php#gd_support)以来、PHPに入っています。 – mario

答えて

7

PHP QRコードライブラリを見ると、GDライブラリにアクセスするファイルは1つだけです(私は思う):qrimage.php。そのファイルをimagick経由で出力するように変更し、残りのPHP QRコードを使用してください。

以下は、置き換え可能なimagick出力ファイルです。qrimage.phpです。しかし、私はWindows上にいるのでこのコードをテストすることができず、imagickをインストールすることはできません。

誰かがデバッグして修正を加えてこの投稿を編集できますか?

<?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, "png", 85, $filename, $saveandprint); 
     } 

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

     //---------------------------------------------------------------------- 
     private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, 
      $format = "png", $quality = 85, $filename = FALSE, $saveandprint = FALSE) 
     { 
      $imgH = count($frame); 
      $imgW = strlen($frame[0]); 

      $col[0] = new ImagickPixel("white"); 
      $col[1] = new ImagickPixel("black"); 

      $image = new Imagick(); 
      $image->newImage($imgW, $imgH, $col[0]); 

      $image->setCompressionQuality($quality); 
      $image->setImageFormat($format); 

      $draw = new ImagickDraw(); 
      $draw->setFillColor($col[1]); 

      for($y=0; $y<$imgH; $y++) { 
       for($x=0; $x<$imgW; $x++) { 
        if ($frame[$y][$x] == '1') { 
         $draw->point($x,$y); 
        } 
       } 
      } 

      $image->drawImage($draw); 
      $image->borderImage($col[0],$outerFrame,$outerFrame); 
      $image->scaleImage($imgW * $pixelPerPoint, 0); 

      if ($filename === FALSE) { 
       Header("Content-type: image/jpeg"); 
       echo $image; 
      } else { 
       if($saveandprint===TRUE){ 
        $image->writeImages($filename, true);   
        Header("Content-type: image/" . $format); 
        echo $image; 
       } else { 
        echo $image; 
       } 
      } 
     }  
    } 

あなたがそのファイルを再マージ、または他の関連する部分を交換する必要がありますいずれかのようにphpqrcode.php全体qrimage.phpが含まれていと呼ばれるマージされたファイルがあります。

あなたは上記のコードのために別のファイル名を使用する場合は、ファイルqrlib.phpmerge.php内の参照を変更する必要があります。

+0

なぜこれにupvotesがないのか分かりません。たぶんよくある質問ではないでしょうか。ありがとう、大変お世話になりました。 – Dave

+0

これにはフォークレポがありますか? – Jhn

0

私は上記の実装をテストし、うまくいきました。 1つの間違いがあります。最終的な画像サイズで外枠を追加することができませんでした。

$image->scaleImage(($imgW + 2*$outerFrame) * $pixelPerPoint, 0); 

また、この場合、GDライブラリはImageMagickよりもはるかに高速であるようです。

私は同じ50のランダムなqrコードの作成にGDとimagickの使用を抑制しました。 私はQRコードが生成されている部分を孤立させたので、実際にはQRimage :: pngを使用しています。

私は生成をテストします。

GD::

  • 分時間:0,0148401260秒
  • 最大時間:0,0211210251秒
  • 平均:0,0167747593の
  • は、これらの私の結果です

ImageMagick:

  • 分時間:0,0799968243 S
  • 最大時間:0,1147611141 S
  • 平均:0,0918840790 S

最終的なコードでは、これはほとんど違いが。コードの他の部分には0.15sのようなものがあり、違いを生む大量のコードがあります(QRcode :: pngの結果はqrcode iith GDあたり0.17s、imagemagickのコードあたり0.24sです) 。

関連する問題