PHP 日本大会 2024

imagesettile

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

imagesettile设置填充的瓦片图像

描述

imagesettile(GdImage $image, GdImage $tile): bool

imagesettile() 设置所有区域填充函数(例如 imagefill()imagefilledpolygon())在使用特殊颜色 IMG_COLOR_TILED 填充时要使用的瓦片图像。

瓦片是一种用于使用重复图案填充区域的图像。任何 GD 图像都可以用作瓦片,并且通过使用 imagecolortransparent() 设置瓦片图像的透明颜色索引,可以创建允许底层区域的某些部分透视的瓦片。

警告

完成瓦片后,您无需采取任何特殊操作,但是如果您销毁了瓦片图像(或让 PHP 销毁它),则在设置新的瓦片图像之前,必须不要使用 IMG_COLOR_TILED 颜色!

参数

image

一个 GdImage 对象,由图像创建函数(例如 imagecreatetruecolor())返回。

tile

用作瓦片的图像对象。

返回值

成功返回 true,失败返回 false

变更日志

版本 描述
8.0.0 imagetile 现在期望 GdImage 实例;以前,期望的是 resource

范例

示例 #1 imagesettile() 示例

<?php
// 加载外部图像
$zend = imagecreatefromgif('./zend.gif');

// 创建一个 200x200 的图像
$im = imagecreatetruecolor(200, 200);

// 设置瓦片
imagesettile($im, $zend);

// 使图像重复
imagefilledrectangle($im, 0, 0, 199, 199, IMG_COLOR_TILED);

// 将图像输出到浏览器
header('Content-Type: image/png');

imagepng($im);
imagedestroy($im);
imagedestroy($zend);
?>

上面的例子将输出类似于

Output of example : imagesettile()

添加注释

用户贡献的注释 2 条注释

aquilo at xtram dot net
20 年前
关于此函数的信息很少,所以我认为我应该添加一些我在尝试使其

工作的过程中发现的笔记。

首先确保您的 PHP 版本高于 4.3.2,我花了 1 个小时搜索 Google,13000 多个此页面的镜像,并且

最终在 AltaVista 上找到了我需要的信息,PHP 4.3.2 中有一个错误会使它无法正常工作。

如果您正在创建基本图像,则需要使用 imageCreateTrueColor() 创建它,如果您使用的是带有透明度的 PNG,我

发现即使使用 GD 取消 PNG 的透明度也不起作用。瓦片 PNG 必须在没有透明度的情况下创建才能与 imageCreate() 一起使用。但据我所见,imageCreateFromXXX() 可以使用透明和非透明的 PNG。

这是一个例子。
<?php
$diagramWidth
= 300;
$diagramHeight = 50;

$image = imageCreateTrueColor ($diagramWidth, $diagramHeight);
$imagebg = imageCreateFromPNG ('tile.png'); // 透明PNG

imageSetTile ($image, $imagebg);
imageFilledRectangle ($image, 0, 0, $diagramWidth, $diagramHeight, IMG_COLOR_TILED);

$textcolor1 = imageColorAllocate ($image, 80, 80, 80);
$textcolor2 = imageColorAllocate ($image, 255, 255, 255);

imageString ($image, 3, 10, 20, '透明PNG平铺测试...', $textcolor1);
imageString ($image, 3, 9, 19, '透明PNG平铺测试...', $textcolor2);

Header("Content-type: image/png");
imagePNG ($image);

imagedestroy ($image);
imagedestroy ($imagebg);
?>

希望这对其他人有帮助!
Aquilo
onion at ooer dot com
19年前
如果您使用的是具有某种透明度的平铺图像,则需要确保目标图像设置为使用 Alpha 混合。默认情况下是这样设置的,但是如果由于任何原因您更改了它,则需要执行以下操作

imagealphablending($image,true);

在使用 IMG_COLOR_TILED 的任何操作之前。
To Top