Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要帮助理解这个PHP代码吗_Php - Fatal编程技术网

需要帮助理解这个PHP代码吗

需要帮助理解这个PHP代码吗,php,Php,我知道一些基本的东西,比如什么是函数,什么是类,什么是方法等等。但是我完全搞不清楚下面的代码到底是怎么读取图像的,我在某个地方读到,我们必须先读取二进制格式的图像。我对php如何读取图像并加载图像进行读取的过程感到困惑。我想知道这个类中每一个代码的功能,以及这些代码的实际情况 代码: class Image { function __construct($filename) { //read the image file to a binary buffer $fp =

我知道一些基本的东西,比如什么是函数,什么是类,什么是方法等等。但是我完全搞不清楚下面的代码到底是怎么读取图像的,我在某个地方读到,我们必须先读取二进制格式的图像。我对php如何读取图像并加载图像进行读取的过程感到困惑。我想知道这个类中每一个代码的功能,以及这些代码的实际情况

代码:

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资源未分配给。这意味着,整个过程毫无意义,因为