2012-06-23 2 views
7

に1ビットのビットマップ(モノクロ)を作成し、私はこの内容の文字列から1ビットのビットマップを書くの可能性を探しています:は、PHP

$str = "001011000111110000"; 

ゼロは白で、一つは黒です。 BMPファイルは18 x 1ピクセルです。

私は24ビットBMPは望んでいませんが、実際の1ビットBMPは必要ありません。

PHPのヘッダーと変換方法を知っている人はいますか?奇妙な要求:)

の少しだ

+1

+1興味深い質問です! – hexafraction

答えて

3

だから、あなたがここで使用したいと思いますして開始するために、PHP-GDです。一般的にこれは、まともなリポジトリを持つ任意のOSにphpをインストールするときに含まれていますが、あなたには適していない場合は、ここでインストール手順を得ることができます。

http://www.php.net/manual/en/image.setup.php

まず、画像の幅にする必要があります正確にどのように大きな把握する必要があります。高さは明らかに常に1になります。

So;

$str = $_GET['str']; 
$img_width = strlen($str); 

STRLENは、$ strの文字列にある文字数を教えてくれる、と私たちはキャラクターごとに1つのピクセルを与えていることから、文字の量は、私たちに必要な幅を提供します。

アクセスを容易にするため、文字列を配列に分割します。各要素は各ピクセルごとに分割されます。

$color_array = str_split($str); 

ここで、描画するピクセルの「ポインタ」を設定しましょう。それはPHPですので、これを初期化する必要はありませんが、きちんとしているのは良いことです。

$current_px = (int) 0; 

これでGDを初期化してイメージを作成できます。

$im = imagecreatetruecolor($img_width, 1); 
// Initialise colours; 
$black = imagecolorallocate($im, 0, 0, 0); 
$white = imagecolorallocate($im, 255, 255, 255); 
// Now, start running through the array 
foreach ($color_array as $y) 
{ 
    if ($y == 1) 
    { 
    imagesetpixel ($im, $current_px , 1 , $black); 
    } 
    $current_px++; // Don't need to "draw" a white pixel for 0. Just draw nothing and add to the counter. 
} 

これは画像を描画し、表示するだけです。

header('Content-type: image/png'); 
imagepng($im); 
imagedestroy($im); 

$白宣言が全く必要ないことに注意してください - 私はちょうどあなたがGDと異なる色を宣言する方法のアイデアを与えるためにそれを残しました。

これを使用する前に少しデバッグする必要があります.GDを使用して以来、ずっと時間がかかりました。とにかく、これが助けて欲しい!

+0

あなたの返信いただきありがとうございますが、私はおそらく純粋なPHPのBMPジェネレータ1ビットモノクロームを探しています。最後に私は正しい方法と解決策を見つけました。そして今、私は正しい1bit bmpモノクローム画像を生成できます!このソリューションでは、印刷リッパーの準備ができている最小次元のバーコードラスターイメージを生成できます。 – htmlandrea

+0

ああ、そうです。さて、GDを使ってBMPイメージを作成するのに役立つクラスがいくつか見つかりました。あなたはここでこれらを見つけることができます:http://www.phpclasses.org/package/5991-PHP-Load-and-save-images-in-the-BMP-format.html 私は残りの情報があなたに最も役に立たない:) – Eoghan

+0

@htmlandrea:あなたが解決策を共有できるなら、いいだろう... – Gonzo

0

これは奇妙な要求ではありません。

私は質問の目的に完全に同意します。実際には、1bitモノクロ画像を管理する必要があります。

答えは次のとおりです。

  • GDはよくPHPのウェブサイトに記載されていません。
  • あなたがゼロからイメージを作成したい場合は、あなたがimagecreate()imagecreatetruecolor()
  • を使用する必要があります今述べた方法(機能)の両方がゼロから1ビット画像を作成することができないようです。
  • 外部画像、1bitモノクロームPNGを作成して、imagecreatefrompng()をロードして解決しました。また

:私はちょうど私がgd.hで見つけた何をここでOfficial Bitbucket Repository

から公式のライブラリオープンソースコードをダウンロードした?:

上位言及した関数の定義を:

/* Functions to manipulate images. */ 

/* Creates a palette-based image (up to 256 colors). */ 
BGD_DECLARE(gdImagePtr) gdImageCreate (int sx, int sy); 

/* An alternate name for the above (2.0). */ 
\#define gdImageCreatePalette gdImageCreate 

/* Creates a truecolor image (millions of colors). */ 
BGD_DECLARE(gdImagePtr) gdImageCreateTrueColor (int sx, int sy); 

したがって、公式の解決策は次のとおりです。imagecreate()で2色のパレットイメージを作成します(これはgdImageCreate() GDのfunctをラップします)。イオン)。

「代替」の解決策は、上記のように外部画像、1ビットモノクロームPNGを作成し、imagecreatefrompng()で作成することです。