PHP 8.4.1 Released!

GD および Image 関数

目次

  • gd_info — 現在インストールされているGDライブラリに関する情報を取得する
  • getimagesize — 画像の大きさを取得する
  • getimagesizefromstring — 画像の大きさを文字列から取得する
  • image_type_to_extension — 画像形式からファイルの拡張子を取得する
  • image_type_to_mime_type — getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeから返される 画像形式のMIMEタイプを取得する
  • image2wbmp — 画像をブラウザあるいはファイルに出力する
  • imageaffine — 元の画像を、オプションのクリッピング領域を使ってアフィン変換した画像を返す
  • imageaffinematrixconcat — 二つのアフィン変換行列を連結する
  • imageaffinematrixget — アフィン変換行列を取得する
  • imagealphablending — イメージのブレンドモードを設定する
  • imageantialias — アンチエイリアス機能を使用すべきかどうかを判断する
  • imagearc — 部分楕円を描画する
  • imageavif — 画像をブラウザあるいはファイルに出力する
  • imagebmp — ビットマップ画像をブラウザかファイルに出力する
  • imagechar — 水平に文字を描画する
  • imagecharup — 垂直に文字を描画する
  • imagecolorallocate — 画像で使用する色を作成する
  • imagecolorallocatealpha — 画像で使用する色を透過度を指定して作成する
  • imagecolorat — ピクセルの色のインデックスを取得する
  • imagecolorclosest — 指定した色に最も近い色のインデックスを取得する
  • imagecolorclosestalpha — 指定した色+アルファ値に最も近い色のインデックスを取得する
  • imagecolorclosesthwb — 色合い、白、黒を有する色のインデックスを得る
  • imagecolordeallocate — イメージの色リソースを開放する
  • imagecolorexact — 指定した色のインデックスを取得する
  • imagecolorexactalpha — 指定した色+アルファ値のインデックスを取得する
  • imagecolormatch — パレットイメージの色を True カラーイメージに近づける
  • imagecolorresolve — 指定した色または出来るだけ近い色のインデックスを得る
  • imagecolorresolvealpha — 指定した色+アルファ値または最も近い色のインデックスを取得する
  • imagecolorset — 指定したパレットインデックスの色を設定する
  • imagecolorsforindex — カラーインデックスからカラーを取得する
  • imagecolorstotal — 画像パレットの色数を検出する
  • imagecolortransparent — 透明色を定義する
  • imageconvolution — div および offset の係数を使用し、3x3 の畳み込み配列を適用する
  • imagecopy — 画像の一部をコピーする
  • imagecopymerge — イメージの一部をコピー、マージする
  • imagecopymergegray — グレースケールでイメージの一部をコピー、マージする
  • imagecopyresampled — 再サンプリングを行いイメージの一部をコピー、伸縮する
  • imagecopyresized — 画像の一部をコピーしサイズを変更する
  • imagecreate — パレットを使用する新規画像を作成する
  • imagecreatefromavif — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefrombmp — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromgd — GD ファイルまたは URL から新規イメージを生成する
  • imagecreatefromgd2 — GD2 ファイルまたは URL から新規イメージを生成する
  • imagecreatefromgd2part — GD2 ファイルまたは URL の指定した部分から新規イメージを生成する
  • imagecreatefromgif — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromjpeg — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefrompng — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromstring — 文字列の中のイメージストリームから新規イメージを作成する
  • imagecreatefromtga — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromwbmp — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromwebp — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromxbm — 新しい画像をファイルあるいは URL から作成する
  • imagecreatefromxpm — 新しい画像をファイルあるいは URL から作成する
  • imagecreatetruecolor — TrueColor イメージを新規に作成する
  • imagecrop — 指定した矩形に画像をクロップする
  • imagecropauto — 利用可能なモードを指定して、画像を自動的にクロップする
  • imagedashedline — 破線を描画する
  • imagedestroy — 画像を破棄する
  • imageellipse — 楕円を描画する
  • imagefill — 塗り潰す
  • imagefilledarc — 楕円弧を描画し、塗りつぶす
  • imagefilledellipse — 塗りつぶされた楕円を描画する
  • imagefilledpolygon — 塗りつぶした多角形を描画する
  • imagefilledrectangle — 塗りつぶした矩形を描画する
  • imagefilltoborder — 特定色で塗りつぶす
  • imagefilter — 画像にフィルタを適用する
  • imageflip — 指定したモードで画像を反転させる
  • imagefontheight — フォントの高さを取得する
  • imagefontwidth — フォントの幅を取得する
  • imageftbbox — freetype2 によるフォントを用いたテキストを囲む箱を取得する
  • imagefttext — FreeType 2 によるフォントを用いてイメージにテキストを描画する
  • imagegammacorrect — GD イメージにガンマ補正を適用する
  • imagegd — GD イメージをブラウザまたはファイルに出力する
  • imagegd2 — GD2 イメージをブラウザまたはファイルに出力する
  • imagegetclip — 長方形を切り取り、画像として取得する
  • imagegetinterpolation — 補間方法を取得する
  • imagegif — 画像をブラウザあるいはファイルに出力する
  • imagegrabscreen — 画面全体をキャプチャする
  • imagegrabwindow — ウィンドウをキャプチャする
  • imageinterlace — インターレースを有効もしくは無効にする
  • imageistruecolor — 画像が truecolor かどうか調べる
  • imagejpeg — 画像をブラウザあるいはファイルに出力する
  • imagelayereffect — アルファブレンディングフラグを設定し、レイヤ効果を使用する
  • imageline — 直線を描画する
  • imageloadfont — 新しいフォントを読み込む
  • imageopenpolygon — オープンポリゴンを描画する
  • imagepalettecopy — あるイメージから他のイメージにパレットをコピーする
  • imagepalettetotruecolor — パレット形式の画像を true color に変換する
  • imagepng — PNG イメージをブラウザまたはファイルに出力する
  • imagepolygon — 多角形を描画する
  • imagerectangle — 矩形を描画する
  • imageresolution — 画像の解像度を取得/設定する
  • imagerotate — 指定された角度で画像を回転する
  • imagesavealpha — 画像を保存する際に、完全なアルファチャネル情報を保存するかどうかを指定する
  • imagescale — 幅と高さを指定して、画像の縮尺を変更する
  • imagesetbrush — 線の描画用にブラシイメージを設定する
  • imagesetclip — 切り取る長方形を設定する
  • imagesetinterpolation — 補間方法を設定する
  • imagesetpixel — 点を生成する
  • imagesetstyle — 線描画用のスタイルを設定する
  • imagesetthickness — 線描画用の線幅を設定する
  • imagesettile — 塗りつぶし用のイメージを設定する
  • imagestring — 文字列を水平に描画する
  • imagestringup — 文字列を垂直に描画する
  • imagesx — 画像の幅を取得する
  • imagesy — 画像の高さを取得する
  • imagetruecolortopalette — TrueColor イメージをパレットイメージに変換する
  • imagettfbbox — TypeType フォントを使用したテキストの bounding box を生成する
  • imagettftext — TrueType フォントを使用してテキストを画像に書き込む
  • imagetypes — この PHP がサポートしている画像形式を返す
  • imagewbmp — 画像をブラウザあるいはファイルに出力する
  • imagewebp — WebP 画像をブラウザあるいはファイルに出力する
  • imagexbm — XBM 画像をブラウザあるいはファイルに出力する
  • iptcembed — バイナリ IPTC データを JPEG イメージに埋めこむ
  • iptcparse — バイナリの IPTC ブロックのタグをパースする
  • jpeg2wbmp — JPEG画像をWBMP画像に変換する
  • png2wbmp — PNG画像をWBMP画像に変換する
add a note

User Contributed Notes 8 notes

up
6
chuckstudios at gmail dot com
15 years ago
I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:

<?php
function imagepgm($image, $filename = null)
{
$pgm = "P5 ".imagesx($image)." ".imagesy($image)." 255\n";
for(
$y = 0; $y < imagesy($image); $y++)
{
for(
$x = 0; $x < imagesx($image); $x++)
{
$colors = imagecolorsforindex($image, imagecolorat($image, $x, $y));
$pgm .= chr(0.3 * $colors["red"] + 0.59 * $colors["green"] + 0.11 * $colors["blue"]);
}
}
if(
$filename != null)
{
$fp = fopen($filename, "w");
fwrite($fp, $pgm);
fclose($fp);
}
else
{
return
$pgm;
}
}
?>
up
5
michal-ok at o2 dot pl
19 years ago
The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn't make it work on two different servers - trying to sharpen a 413 x 413 image I ended up with "Fatal error: Allowed memory size of 8388608 bytes exhausted" or "Internal Server Error" or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.
up
4
felipensp at gmail dot com
18 years ago
Representation decimal of a color in hexadecimal for use on functions of library GD.

<?php

// Representation hexadecimal
$var = '#FFFFFF';

function
getRgbFromGd($color_hex) {

return
array_map('hexdec', explode('|', wordwrap(substr($color_hex, 1), 2, '|', 1)));

}

print_r(getRgbFromGd($var));

// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )

?>
up
-1
shd at earthling dot net
18 years ago
If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:

<?php
function imagebmp ($im, $fn = false)
{
if (!
$im) return false;

if (
$fn === false) $fn = 'php://output';
$f = fopen ($fn, "w");
if (!
$f) return false;

//Image dimensions
$biWidth = imagesx ($im);
$biHeight = imagesy ($im);
$biBPLine = $biWidth * 3;
$biStride = ($biBPLine + 3) & ~3;
$biSizeImage = $biStride * $biHeight;
$bfOffBits = 54;
$bfSize = $bfOffBits + $biSizeImage;

//BITMAPFILEHEADER
fwrite ($f, 'BM', 2);
fwrite ($f, pack ('VvvV', $bfSize, 0, 0, $bfOffBits));

//BITMAPINFO (BITMAPINFOHEADER)
fwrite ($f, pack ('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 24, 0, $biSizeImage, 0, 0, 0, 0));

$numpad = $biStride - $biBPLine;
for (
$y = $biHeight - 1; $y >= 0; --$y)
{
for (
$x = 0; $x < $biWidth; ++$x)
{
$col = imagecolorat ($im, $x, $y);
fwrite ($f, pack ('V', $col), 3);
}
for (
$i = 0; $i < $numpad; ++$i)
fwrite ($f, pack ('C', 0));
}
fclose ($f);
return
true;
}
?>

It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what's required by ExcelWriter).
up
-2
ingo at jache dot de
13 years ago
I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn't give a good blur.

The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It's still quite slow.

<?php

function blurImage($srcimg,$blur)
{
$blur = $blur*$blur;
$blur = max(0,min(1,$blur));

$srcw = imagesx($srcimg);
$srch = imagesy($srcimg);

$dstimg = imagecreatetruecolor($srcw,$srch);

$f1a = $blur;
$f1b = 1.0 - $blur;


$cr = 0; $cg = 0; $cb = 0;
$nr = 0; $ng = 0; $nb = 0;

$rgb = imagecolorat($srcimg,0,0);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;

//-------------------------------------------------
// first line is a special case
//-------------------------------------------------
$x = $srcw;
$y = $srch-1;
while (
$x--)
{
//horizontal blurren
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;

$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);

$or = $nr;
$og = $ng;
$ob = $nb;

imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}
//-------------------------------------------------

//-------------------------------------------------
// now process the entire picture
//-------------------------------------------------
$y = $srch-1;
while (
$y--)
{

$rgb = imagecolorat($srcimg,0,$y);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;

$x = $srcw;
while (
$x--)
{
//horizontal
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;

$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);

$or = $nr;
$og = $ng;
$ob = $nb;


//vertical
$rgb = imagecolorat($dstimg,$x,$y+1);
$vr = ($rgb >> 16) & 0xFF;
$vg = ($rgb >> 8) & 0xFF;
$vb = ($rgb) & 0xFF;

$nr = ($nr * $f1a) + ($vr * $f1b);
$ng = ($ng * $f1a) + ($vg * $f1b);
$nb = ($nb * $f1a) + ($vb * $f1b);

$vr = $nr;
$vg = $ng;
$vb = $nb;

imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}

}
//-------------------------------------------------
return $dstimg;

}


$srcimg = imagecreatefromjpeg("test.jpg");
$dstimg = blurImage($srcimg,0.2);

header('Content-type: image/jpeg');
echo(
imagejpeg($dstimg) );
exit();


?>
up
-2
jeff at lushmedia dot com
21 years ago
I wrote an online overview of the image functions that people might find useful. In addition to a general overview of the various function categories and code samples, I have included many interactive examples of the functions, allowing viewers to experiment with the parameters, and seeing the results in real time. The presentation is located at New York PHP
http://www.nyphp.org/content/presentations/GDintro/
up
-3
delabahan at gmail dot com
7 years ago
This is an example of get high resolution images.

<?php
/**
* Class name : resizeImage
* Created by : wang
* Description : This class is to resize the image from original size to new size
*/
class resizeImage
{
/**
* Function name : resize_img
* Description : This function is to resize image
* @param : $origimg variable is the original image
* @param : $newimg variable is the new image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
public function resize_img($origimg,$newimg,$w,$h){
$info = getimagesize($origimg);
$mime = $info['mime'];

// Make sure that the requested file is actually an image
if(substr($mime, 0, 6) != 'image/')
{
header('HTTP/1.1 400 Bad Request');
return
'Error: requested file is not an accepted type: ' .$origimg;
exit();
}

// Check they extention of image
$extension = image_type_to_extension($info[2]);
if(
strtolower($extension) == '.png'){
$img = $this->resize_imagepng($origimg,$w, $h);
imagepng($img,$newimg);
imagedestroy($img);
}elseif(
strtolower($extension) == '.jpeg'){
$img = $this->resize_imagejpeg($origimg, $w, $h);
imagejpeg($img, $newimg);
imagedestroy($img);
}elseif(
strtolower($extension == '.gif')){
$img = $this->resize_imagegif($origimg, $w, $h);
imagegif($img,$newimg);
imagedestroy($img);
}

}
/**
* End function name : resize_img
*/

/**
* Function name : resize_imagepng
* Description : This function is to resize png image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagepng($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefrompng($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagepng
*/

/**
* Function name : resize_imagejpeg
* Description : This function is to resize jpeg image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagejpeg($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagejpeg
*/

/**
* Function name : resize_imagegif
* Description : This function is to resize gif image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagegif($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefromgif($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagegif
*/
}
/**
* End class name : resizeImage
*/
?>
up
-4
mpyw
8 years ago
This is an example of black-and-white imagebmp() implementation.

<?php

/**
* Output a black-and-white BMP image to either the browser or a file.
*
* @param resource $image
* An image resource, returned by one of the image creation functions,
* such as imagecreatetruecolor().
*
* @param string|null $to
* The path or an open stream resource
* (which is automatically being closed after this function returns)
* to save the file to.
* If not set or NULL, the raw image stream will be outputted directly.
*
* @param float $threshold
* The number in the range of 0.0 to 1.0.
* Brighter for larger, or darker for smaller.
*
* @return bool Returns TRUE on success or FALSE on failure.
*
*/
function imagebwbmp($image, $to = null, $threshold = 0.5)
{
if (
func_num_args() < 1) {
$fmt = "imagebwbmp() expects a least 1 parameters, %d given";
trigger_error(sprintf($fmt, func_num_args()), E_USER_WARNING);
return;
}
if (!
is_resource($image)) {
$fmt = "imagebwbmp() expects parameter 1 to be resource, %s given";
trigger_error(sprintf($fmt, gettype($image)), E_USER_WARNING);
return;
}
if (!
is_numeric($threshold)) {
$fmt = "imagebwbmp() expects parameter 3 to be float, %s given";
trigger_error(sprintf($fmt, gettype($threshold)), E_USER_WARNING);
return;
}

if (
get_resource_type($image) !== 'gd') {
$msg = "imagebwbmp(): supplied resource is not a valid gd resource";
trigger_error($msg, E_USER_WARNING);
return
false;
}
switch (
true) {
case
$to === null:
break;
case
is_resource($to) && get_resource_type($to) === 'stream':
case
is_string($to) && $to = fopen($to, 'wb'):
if (
preg_match('/[waxc+]/', stream_get_meta_data($to)['mode'])) {
break;
}
default:
$msg = "imagebwbmp(): Invalid 2nd parameter, it must a writable filename or a writable stream";
trigger_error($msg, E_USER_WARNING);
return
false;
}

if (
$to === null) {
$to = fopen('php://output', 'wb');
}

$biWidth = imagesx($image);
$biHeight = imagesy($image);
$biSizeImage = ((int)ceil($biWidth / 32) * 32 / 8 * $biHeight);
$bfOffBits = 54 + 4 * 2; // Use two colors (black and white)
$bfSize = $bfOffBits + $biSizeImage;

fwrite($to, 'BM');
fwrite($to, pack('VvvV', $bfSize, 0, 0, $bfOffBits));
fwrite($to, pack('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 1, 0, $biSizeImage, 0, 0, 0, 0));
fwrite($to, "\xff\xff\xff\x00"); // white
fwrite($to, "\x00\x00\x00\x00"); // black

for ($y = $biHeight - 1; $y >= 0; --$y) {
$byte = 0;
for (
$x = 0; $x < $biWidth; ++$x) {
$rgb = imagecolorsforindex($image, imagecolorat($image, $x, $y));
$value = (0.299 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']) / 0xff;
$color = (int)($value > $threshold);
$byte = ($byte << 1) | $color;
if (
$x % 8 === 7) {
fwrite($to, pack('C', $byte));
$byte = 0;
}
}
if (
$x % 8) {
fwrite($to, pack('C', $byte << (8 - $x % 8)));
}
if (
$x % 32) {
fwrite($to, str_repeat("\x00", (int)((32 - $x % 32) / 8)));
}
}

return
true;
}
?>
To Top