GD 和图像处理 函数
目录
- 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 — Concatenate two affine transformation matrices
- imageaffinematrixget — Get an affine transformation matrix
- imagealphablending — 设定图像的混色模式
- imageantialias — 是否使用抗锯齿(antialias)功能
- imagearc — 画弧线
- imageavif — 输出图象到浏览器或文件。
- imagebmp — Output a BMP image to browser or file
- imagechar — 水平地绘制一个字符
- imagecharup — 垂直地绘制一个字符
- imagecolorallocate — 为图像分配颜色
- imagecolorallocatealpha — 为图像分配颜色
- imagecolorat — 取得某像素的颜色索引值
- imagecolorclosest — 取得与指定的颜色最接近的颜色索引值
- imagecolorclosestalpha — 获取最接近指定颜色 + alpha 的颜色索引
- imagecolorclosesthwb — 取得与给定颜色最接近的色度的黑白色的索引
- imagecolordeallocate — 取消图像颜色的分配
- imagecolorexact — 取得指定颜色的索引值
- imagecolorexactalpha — 取得指定的颜色加透明度的索引值
- imagecolormatch — 使一个图像中调色板版本的颜色与真彩色版本更能匹配
- imagecolorresolve — 取得指定颜色的索引值或有可能得到的最接近的替代值
- imagecolorresolvealpha — 取得指定颜色 + alpha 或其最接近的替代值
- 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 — 新建真彩色图像
- imagecrop — Crop an image to the given rectangle
- imagecropauto — Crop an image automatically using one of the available modes
- imagedashedline — 绘制虚线
- imagedestroy — 销毁图像
- imageellipse — 画椭圆
- imagefill — 漫水填充
- imagefilledarc — 绘制部分弧形并填充
- imagefilledellipse — 绘制椭圆并填充
- imagefilledpolygon — 绘制多边形并填充
- imagefilledrectangle — 绘制矩形并填充
- imagefilltoborder — 漫水填充特定颜色
- imagefilter — 对图像使用过滤器
- imageflip — Flips an image using a given mode
- imagefontheight — 获取字体高度
- imagefontwidth — 获取字体宽度
- imageftbbox — 通过 freetype2 使用字体给出文本的边界框
- imagefttext — 使用 FreeType 2 字体将文本写入图像
- imagegammacorrect — 对 GD 图像应用伽玛校正
- imagegd — 将 GD 图像输出到浏览器或文件
- imagegd2 — 将 GD2 图像输出到浏览器或文件
- imagegetclip — Get the clipping rectangle
- imagegetinterpolation — Get the interpolation method
- imagegif — 输出图象到浏览器或文件。
- imagegrabscreen — Captures the whole screen
- imagegrabwindow — Captures a window
- imageinterlace — 启用或禁用隔行扫描
- imageistruecolor — 检查图像是否为真彩色图像
- imagejpeg — 输出图象到浏览器或文件。
- imagelayereffect — 设定 alpha 混合标志以使用分层效果
- imageline — 绘制直线
- imageloadfont — 载入新字体
- imageopenpolygon — Draws an open polygon
- imagepalettecopy — 将调色板从一个图像复制到另一个
- imagepalettetotruecolor — Converts a palette based image to true color
- imagepng — 将 PNG 图像输出到浏览器或文件
- imagepolygon — 绘制多边形
- imagerectangle — 绘制矩形
- imageresolution — Get or set the resolution of the image
- imagerotate — 用给定角度旋转图像
- imagesavealpha — 保存图像时是否保留完整的 alpha 通道信息
- imagescale — Scale an image using the given new width and height
- imagesetbrush — 为线条设置笔刷图像
- imagesetclip — Set the clipping rectangle
- imagesetinterpolation — Set the interpolation method
- imagesetpixel — 设置单个像素
- imagesetstyle — 设定线条的样式
- imagesetthickness — 设定画线的粗细
- imagesettile — 设置要填充的平铺图像
- imagestring — 水平绘制字符串
- imagestringup — 垂直绘制字符串
- imagesx — 取得图像宽度
- imagesy — 取得图像高度
- imagetruecolortopalette — 将真彩色图像转换为调色板图像
- imagettfbbox — 取得使用 TrueType 字体的文本的边界框
- imagettftext — 用 TrueType 字体向图像写入文本
- imagetypes — 返回 PHP 内置支持的图像类型
- imagewbmp — 输出图象到浏览器或文件。
- imagewebp — 将 WebP 格式的图像输出到浏览器或文件
- imagexbm — 输出 XBM 图像到浏览器或文件
- iptcembed — 嵌入二进制 IPTC 数据到 JPEG 图像中
- iptcparse — 将二进制 IPTC 块解析为单个标签
- jpeg2wbmp — 将 JPEG 图像文件转换为 WBMP 图像文件
- png2wbmp — 将 PNG 图像文件转换为 WBMP 图像文件
+添加备注
用户贡献的备注 8 notes
chuckstudios at gmail dot com ¶
16 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;
}
}
?>
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.
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 )
?>
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).
delabahan at gmail dot com ¶
8 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
*/
?>
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();
?>
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/
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;
}
?>