easygithdev / easygd
EasyGD - 一款使GD使用更简单的PHP框架
v1.0.1
2020-06-21 09:51 UTC
Requires
- php: >=7.0
This package is auto-updated.
Last update: 2024-09-23 16:59:57 UTC
README
EasyGD是一个使GD使用更简单的PHP框架
该框架允许您轻松从文件、URL或字符串中加载图片。
加载图片后,您可以应用转换。
然后您可以选择将结果保存为文件,或者返回一个字符串,或者直接将图片发送到浏览器。
安装
安装相当典型 - 使用composer
composer require easygithdev/easygd
头部脚本
在使用类之前,需要包含自动加载器。
<?php require __DIR__ . '/vendor/autoload.php'; use Easygd\Image;
基础知识
在所有后续示例中,$stream变量可以是URL、文件或字符字符串。
例如,您可以使用以下URL使用PHP标志
$stream = 'https://php.ac.cn/images/logos/new-php-logo.png';
如何加载和显示图片
在这种情况下,流直接发送到浏览器。
(new Image())->load($stream)->show();
如何在HTML标签中加载和渲染图片
您可以使用data src属性在HTML标签中渲染图片。
仅在图片较小的情况下使用,否则您的HTML页面可能会变得很大。
<img src="<?php echo (new Image())->load($stream)->src() ?>" />
如何将图片保存到磁盘
在这种情况下,流保存到浏览器。
(new Image())->load($stream)->save('php.png');
如何同时加载、保存和显示图片
(new Image())->load($stream)->save('php.png')->show();
如何进行多次保存
(new Image())->load($stream)->save('php.png') ->setType(IMAGETYPE_GIF)->save('php.gif') ->setType(IMAGETYPE_JPEG)->save('php.jpg');
其他类型
定义维度
$dimension = (new Dimension())->create(300, 300);
定义颜色
// Create a color with hexadecimal code $color = (new Color())->create('#83d01e'); // OR create a color from a preset $color = (new Color())->create(Color::Yellow); // OR create a preseted color $color = Color::Yellow();
定义位置
$position = (new Position())->create(200, 125);
定义文本
$text = (new Text())->create('Hello World');
创建自己的图片
如何创建TrueType图片
(new Image())->create($dimension, $color)->show();
在图片中添加文本
如何在图片中绘制文本
(new Image)->create((new Dimension)->create(300, 300), Color::Blue()) ->addText( (new Text())->create('Hello World') ->setColor(Color::Silver()) ->setSize(3) ->setPosition((new Position)->create(200, 125)) )->show();
如何垂直绘制字符串到图片中
(new Image())->create((new Dimension())->create(200, 200))->addText( (new Text())->create('gd library') ->setSize(5) ->setColor(Color::White()) ->setDrawtype(Text::TEXT_DRAW_VERTICAL) ->setPosition((new Position())->create(40, 100)) )->show();
如何将透明颜色应用到图片中的文本
(new Image)->create((new Dimension())->create(300, 300), Color::White())->addText( (new Text())->create('Alpha Color') ->setColor( (new Color())->create('#FF0000')->setAlpha(95) ) ->setSize(5) ->setPosition((new Position())->create(55, 35)) ) ->show();
如何将“GD文本”、“TrueType文本”、“FreeType文本”混合到图片中
(new Image())->create((new Dimension())->create(300, 300), (new Color())->create('#f2f2f2')) ->addText( (new Text())->create('True Type') ->setFontType(Text::TEXT_FONT_TRUETYPE) ->setFontfile(Text::TEXT_UNIX_FONT_PATH . '/truetype/dejavu/DejaVuSans.ttf') ->setColor(Color::Silver()) ->setSize(16) ->setAngle(45) ->setPosition((new Position())->create(100, 100)) ) ->addText( (new Text())->create('Hello ' . PHP_EOL . 'Free Type') ->setFontType(Text::TEXT_FONT_FREETYPE) ->setFontfile(Text::TEXT_UNIX_FONT_PATH . '/truetype/dejavu/DejaVuSans.ttf') ->setColor(Color::Silver()) ->setSize(16) ->setAngle(45) ->setPosition((new Position())->create(100, 175)) ) ->addText( (new Text())->create('hello world') ->setColor(Color::Maroon()) ->setPosition((new Position())->create(98, 173)) ) ->show();
获取信息
如何获取图片信息
$infos = (new Image())->load($stream)->getInfos(); echo '<pre>', $infos, '</pre>'; $infos = (new Image())->load($stream)->getInfos()->toArray(); echo '<pre>', print_r($infos, true), '</pre>';
如何获得预设位置
$image = (new Image())->load($stream); echo 'TOP_LEFT:', $image->topLeft(), '<br/>'; echo 'TOP_CENTER:', $image->topCenter(), '<br/>'; echo 'TOP_RIGHT:', $image->topRight(), '<br/>'; echo 'MIDDLE_LEFT', $image->middleLeft(), '<br/>'; echo 'MIDDLE_CENTER', $image->middleCenter(), '<br/>'; echo 'MIDDLE_RIGHT', $image->middleRight(), '<br/>'; echo 'BOTTOM_LEFT', $image->bottomLeft(), '<br/>'; echo 'BOTTOM_CENTER', $image->bottomeCenter(), '<br/>'; echo 'BOTTOM_RIGHT', $image->bottomRight(), '<br/>';
它将返回一个Position对象...
如何获取/添加IPTC标签
请记住,IPTC与JPEG文件一起工作。
(new Image())->load($stream)->setType(IMG_JPEG)->save('iptc.jpg'); $fileSrc = __DIR__ . '/iptc.jpg'; $fileDst = __DIR__ . '/iptc2.jpg'; $iptc = (new Iptc())->create($fileSrc, null); $iptc->addTag(Iptc::IPTC_CITY, 'CHEVERNY') ->addTag(Iptc::IPTC_COUNTRY, 'FRANCE') ->addTag(Iptc::IPTC_CREATED_DATE, '2012-03-01') ->addTag(Iptc::IPTC_CATEGORY, 'JOURNEY'); if ($iptc->write($fileDst) === false) { throw new Exception('Error to write IPTC'); } echo '<pre>', (new Image())->load($fileDst)->getInfos(), '</pre>';
调整图片大小
如何调整图片大小
(new Image)->load($stream) ->resizeByPercent(0.5) ->show();
如何通过固定宽度和高度调整图片大小
(new Image)->load($stream) ->resizeByWidth(50) ->show(); (new Image)->load($stream) ->resizeByHeight(30) ->show();
如何安全地调整图片大小
(new Image)->load($stream) ->resizeAuto((new Dimension())->create(300, 200)) ->show();
如何创建缩略图
(new Image)->load($stream) ->thumbnail(140, Color::Silver()) ->show();
裁剪和旋转
如何裁剪图片
(new Image)->load($stream) ->crop((new Position)->create(20, 13), (new Dimension())->create(80, 40)) ->show();
如何旋转图片
(new Image)->load($stream) ->rotate(90) ->show();
合并两个图片
如何将标志插入到图片中
$logo = (new Image)->load('https://php.ac.cn/images/logos/php-med-trans-light.gif') ->resizeByPercent(0.6); (new Image)->load('http://static.php.net/www.php.net/images/logos/php-med-trans.png') ->inlay($logo, (new Position)->create(30, 20), 100) ->show();
创建缩略图
在这里,您可以找到一些创建缩略图的示例。
$text = (new Text)->create('Copyright (C) 2020 Your Name') ->setFontType(Text::TEXT_FONT_TRUETYPE) ->setFontfile(Text::TEXT_UNIX_FONT_PATH . '/truetype/dejavu/DejaVuSans.ttf') ->setSize(5) ->setColor(Color::White()) ->setPosition((new Position())->create(40, 190)); $path = __DIR__ . '/images/original/'; foreach (new ImageFilterIterator(new DirectoryIterator($path)) as $file) { if (($image = (new Image)->load($file->getPathname())) === false) { continue; } $thumb1 = $image->thumbnail(100)->src(); $thumb2 = $image->thumbnail(200)->addText($text)->src(); $thumb3 = $image->thumbnail(400)->src(); ?> <img src="<?php echo $thumb1 ?>" /> <img src="<?php echo $thumb2 ?>" /> <img src="<?php echo $thumb3 ?>" /> <br /> <?php } ?>
过滤器
使用工厂使用所有过滤器
您可以使用具有公共语法的过滤器。工厂使用三种类型的过滤器
- FILTER_PRESET
- FILTER_LOOKUPTABLE
- FILTER_CONVOLUTION
您可以使用这种方式调用预设/卷积/查找表过滤器
// Preset filters $src1 = Filter::negate()->process((new Image())->load($stream))->src(); // Convolution filters $src2 = Filter::emboss()->process((new Image())->load($stream))->src(); // LookupTable filters $src3 = Filter::thresholding()->process((new Image())->load($stream))->src();
使用预设过滤器
您可以使用
- PRESET_NEGATE
- PRESET_GRAYSCALE
- PRESET_EDGEDETECT
- PRESET_EMBOSS
- PRESET_GAUSSIAN_BLUR
- PRESET_MEAN_REMOVAL
- PRESET_SELECTIVE_BLUR
- PRESET_PIXELATE
- PRESET_SMOOTH
- PRESET_CONTRAST
- PRESET_BRIGHTNESS
- PRESET_COLORIZE
如何创建和应用预设过滤器
(new PresetFilter())->create(PresetFunctions::negate())->process((new Image())->load($stream))->show();
使用卷积过滤器
您可以使用预设卷积或自己的卷积过滤器。
如何使用预设卷积
(new ConvolutionFilter())->create(ConvolutionFunctions::CONVOLUTION_GAUSSIAN())->process((new Image())->load($stream))->show();
如何使用您自己的卷积
$matrix = [ -1, 7, -1, 0, 0, 0, 1, 7, 1 ]; $convolution = (new Convolution())->create($matrix);; $dataSrc = (new ConvolutionFilter())->create($convolution)->process((new Image())->load($stream))->src();
使用查找表过滤器
您可以使用预设的查找表或您自己的查找表过滤器。
如何使用预设的查找表
$closure = \Closure::fromCallable([new LookupTableFunctions(), 'LightnessGray']), (new LookUpTableFilter())->create((new LookUpTable())->create($closure))->process((new Image())->load($stream))->src();
要创建新的查找表过滤器,您必须创建一个类似于以下的回调方法
function personnal($rgb) { $r = ($rgb['red'] > 128) ? 255 : 128; $g = ($rgb['green'] > 128) ? 255 : 128; $b = ($rgb['blue'] > 128) ? 255 : 128; return [$r, $g, $b]; } $closure = \Closure::fromCallable('personnal'); $lut = (new LookUpTableFilter())->create((new LookUpTable())->create($closure))->process((new Image())->load($stream))->src();
许可协议
本项目采用MIT许可协议 - 有关详细信息,请参阅LICENSE文件