需要帮助理解这个PHP代码吗
我知道一些基本的东西,比如什么是函数,什么是类,什么是方法等等。但是我完全搞不清楚下面的代码到底是怎么读取图像的,我在某个地方读到,我们必须先读取二进制格式的图像。我对php如何读取图像并加载图像进行读取的过程感到困惑。我想知道这个类中每一个代码的功能,以及这些代码的实际情况 代码:需要帮助理解这个PHP代码吗,php,Php,我知道一些基本的东西,比如什么是函数,什么是类,什么是方法等等。但是我完全搞不清楚下面的代码到底是怎么读取图像的,我在某个地方读到,我们必须先读取二进制格式的图像。我对php如何读取图像并加载图像进行读取的过程感到困惑。我想知道这个类中每一个代码的功能,以及这些代码的实际情况 代码: class Image { function __construct($filename) { //read the image file to a binary buffer $fp =
class Image {
function __construct($filename) {
//read the image file to a binary buffer
$fp = fopen($filename, 'rb') or die("Image $filename doesn't exist");
$buf = '';
while(!feof($fp))
$buf .= fgets($fp, 4096);
//create image
imagecreatefromstring($buf);
}
}
当我用语法$image=newimage(“pic.jpg”)实例化对象图像时代码>它不以html格式打印图像,变量$image实际上包含什么,如果我想以html格式打印图像,我应该做什么
更新:
仅供参考:我了解PHP和HTML,因为我在尝试学习PHP中的OOP,我偶然看到了这篇文章,因为我不清楚这段代码,所以我想问你们,我非常感谢你们的回答,如果你们能尝试解释代码,而不是让我尝试不同的代码,我将不胜感激
我的关注纯粹是为了学习,我不会在任何地方实现它。在HTML中,您所需要做的就是在
源必须是图像的URL,相对于Web服务器根目录
至于代码,你提出了。这对于HTML使用是完全不必要的,对于PHP中的标准图像使用也是不必要的,因为有直接的方法从文件加载图像,例如JPEG文件
目前,您的Image
类的构造函数获取一个文件名,打开该文件,并将整个内容作为二进制数据读取到字符串$buf
,每次4096字节。然后它调用imagecreatefromstring($buf)
将文件数据转换为图像资源,然后可以在PHP中进一步使用
正如我所说的,如果您只想在HTML中显示现有图像,那么这些都不是特别相关的。这些命令是为图像操作、检查和创建而设计的。在HTML中,您只需在
源必须是图像的URL,相对于Web服务器根目录
至于代码,你提出了。这对于HTML使用是完全不必要的,对于PHP中的标准图像使用也是不必要的,因为有直接的方法从文件加载图像,例如JPEG文件
目前,您的Image
类的构造函数获取一个文件名,打开该文件,并将整个内容作为二进制数据读取到字符串$buf
,每次4096字节。然后它调用imagecreatefromstring($buf)
将文件数据转换为图像资源,然后可以在PHP中进一步使用
正如我所说的,如果您只想在HTML中显示现有图像,那么这些都不是特别相关的。这些命令是为图像操作、检查和创建而设计的。PHP的imagecreate*
函数返回一个资源。如果要将其发送到客户端,则必须设置适当的头,然后发送原始图像:
<img src="/path/to/image/image.jpg" width="600" height="400" alt="Image Name" />
有关详细信息,请参阅。PHP的imagecreate*
函数返回资源。如果要将其发送到客户端,则必须设置适当的头,然后发送原始图像:
<img src="/path/to/image/image.jpg" width="600" height="400" alt="Image Name" />
有关详细信息,请参阅。如果您只想显示图像,以上所有内容都是无关的。您只需要写出一个HTML图像标记,例如
header('Content-Type: image/jpeg');
imagejpeg($img);
echo';
就这样
您给出的代码需要很长很不方便的方式来加载图像,以便使用GD库进行操作;这几乎肯定不是你想要做的,但是如果你做了,那么你可以用它来代替。如果你只想显示图像,以上所有的一切都是不相关的。您只需要写出一个HTML图像标记,例如
header('Content-Type: image/jpeg');
imagejpeg($img);
echo';
就这样
您给出的代码需要很长很不方便的方式来加载图像,以便使用GD库进行操作;这几乎肯定不是您想要做的,但是如果您做了,那么您可以使用。您的$image
将包含image
类的实例
您将尝试打开$filename
。如果这不可能,脚本将死亡/终止,并显示一条错误消息。如果可以打开$filename
,则该文件将被读入$buf
变量,并将创建GD图像资源
由于以下几个原因,该代码不太理想:
由imagecreatefromstring
创建的GD资源未分配给。这意味着,整个过程毫无意义,因为资源在创建后将丢失。在构造函数中完成的工作丢失了
调用die
将终止脚本。这是无法回避的。最好是
使用fopen
和fread
读取文件是可行的,但如果操作系统支持,它将使用内存映射技术来提高性能
这对可测试性是有害的
更好的方法是使用
class Image
{
public $source = '';
function __construct($filename)
{
$fp = fopen($filename, 'rb') or die("Image $filename doesn't exist");
$buf = '';
while(!feof($fp))
{
$buf .= fgets($fp, 4096);
}
$this->source = imagecreatefromstring($buf);
}
}
$image = new Image('image.jpg');
/* use $image->source for image processing */
header('Content-Type: image/jpeg');
imagejpeg($image->source);
那你就可以了
class Image
{
protected $_gdResource;
public function loadFromFile($fileName)
{
$this->_gdResource = imagecreatefromstring(
file_get_contents($fileName)
);
if(FALSE === $this->_gdResource) {
throw new InvalidArgumentException(
'Could not create GD Resource from given filename. ' .
'Make sure filename is readable and contains an image type ' .
'supported by GD'
);
}
}
// other methods working with $_gdResource …
}
您的$image
将包含image
类的实例
您将尝试打开$filename
。如果这不可能,脚本将死亡/终止,并显示一条错误消息。如果可以打开$filename
,则该文件将被读入$buf
变量,并将创建GD图像资源
由于以下几个原因,该代码不太理想:
由imagecreatefromstring
创建的GD资源未分配给。这意味着,整个过程毫无意义,因为