Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 使用imagecreatefromjpeg的脚本内存消耗高_Php - Fatal编程技术网

Php 使用imagecreatefromjpeg的脚本内存消耗高

Php 使用imagecreatefromjpeg的脚本内存消耗高,php,Php,我构建了以下代码来检查JPG并将其转换为WebP图像 这似乎占用了大量内存,当WebP文件已经存在时,当前大约占用14680064内存,创建WebP时占用27262976内存 有谁能告诉我这是否“正常”,以及我是否可以对代码进行任何修改以优化代码 $path = 'http://www.domain.co.uk/images/uploads/gallery/1.jpg'; if ( !empty($path) ) { if ( strpos( $_SERVER['HTT

我构建了以下代码来检查JPG并将其转换为WebP图像

这似乎占用了大量内存,当WebP文件已经存在时,当前大约占用14680064内存,创建WebP时占用27262976内存

有谁能告诉我这是否“正常”,以及我是否可以对代码进行任何修改以优化代码

$path = 'http://www.domain.co.uk/images/uploads/gallery/1.jpg';

if ( !empty($path) ) 
{       
    if ( strpos( $_SERVER['HTTP_ACCEPT'], 'image/webp' ) !== false ) 
    {               
        $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $domain_path = $protocol . $_SERVER['HTTP_HOST'];

        $filename = basename($path);
        $filename_no_ext = basename($path, ".jpg");

        $path = str_replace($domain_path, ".", $path);
        $path_without_filename = str_replace($filename, "", $path);

        $save_to_path = $path_without_filename.$filename_no_ext.'.webp';

        if ( file_exists($path) )
        {
            if ( ! file_exists($save_to_path) )
            {           
                $temp = imagecreatefromjpeg($path);

                imagewebp($temp, $save_to_path);                        
                imagedestroy($temp);
            }
        }

        return substr($save_to_path, 1);
    } 
    else
    {
        return $path;
    }
}

上传的图像有多大?根据经验,它将使用大约像素宽度*高度*3字节的内存。您观察到的内存消耗大约相当于3000x3000px的图像。为什么不使用呢?谢谢@deceze,这真的很有帮助。我不知道这是计算结果。这些图像的长度为3000px,这是正确的。将图像加载到内存(例如,
imagecreatefromjpeg
)会将原始图像数据存储在内存中,即每像素每颜色(RGB)一个字节…