easygithdev/easygd

EasyGD - 一款使GD使用更简单的PHP框架

v1.0.1 2020-06-21 09:51 UTC

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';

PHP Logo

如何加载和显示图片

在这种情况下,流直接发送到浏览器。

(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文件