15

GDが次のような画像をロードするための異なる機能を持っている理由を本当に理解できません:

imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif()  

画像が文字列の場合、単一の機能がありますか?

imagecreatefromstring()

実際、次のように、画像を文字列に読み込んで関数に渡す方がはるかに優れています。

$imgBlob = file_get_contents($imagePath);
imagecreatefromstring($imageBlob);
unset($imgBlob);  //> Free memory, but I am not interested in memory consumpation

? または、何か不足していますか?これにより、新規ユーザーが混乱する可能性があります

関数を作成するのを忘れただけなのimageCreateFromFile()でしょうか?

Ps。もちろん、file_get_contentsメソッドを使用したメモリ消費には興味がありません

4

2 に答える 2

10

imagecreatefromstring()渡されたイメージ タイプに対してスイッチを実行し、システムがそのイメージ タイプをサポートしているかどうかを確認し、実際に正しいimagecreatefrom*関数を実行します。

ソースコードをチェックアウトしてこれを確認できます: https://github.com/php/php-src/blob/master/ext/gd/gd.c?source=cc (関数の行 2280、行 2301画像タイプをオンにして、正しい関数を呼び出します)。

したがって、imagecreatefromstring()関数は実際には単なるヘルパー ラッパーです。_php_image_type実際の画像タイプ関数を呼び出すと、実行しないことでわずかなメリットが得られます(2217 行目)。

于 2013-12-10T17:32:47.610 に答える
2
imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif()

ファイルから画像リソースを作成する - ファイルパスをパラメーターとして渡します。これが唯一の受け入れ可能な入力です。

imagecreatefromstring()

ファイルではなく文字列から画像リソースを作成します。事実上何でもかまいません。コンテンツを入力することもできます。たとえば、使用できます

imagecreatefromstring(base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='));

1x1 ピクセルの透明な gif を取得します (gif の追跡に役立ちます)。

確かに、すべてをimagecreatefromstringに渡すことはできますが、メモリ効率は良くありません。大きな画像を処理するには大量のメモリが必要であり、メモリ制限が低いため、大きな違いが生じます。

于 2012-06-09T19:02:41.930 に答える