2

我正在尝试通过 PHP 上传图像。上传时,它应该调整大小,使其尺寸与我在 config[]-array 中定义的一样大,并且它的文件大小也小于或等于我的 config[]-array 中的预定义值。但不知何故,getFileSize() 方法总是返回相同的大小,即使在调整图像大小之后也是如此。

这是我的代码。解释如下。

$tries = 0;
while ( $image->getFileSize() > $config['image_max_file_size'] && $tries < 10 ) {
    $factor = 1 - (0.1 * $tries);

    echo $image->getFileSize().PHP_EOL;
    if ( !$image->resize($config['image_max_width'], $config['image_max_height'], $factor) ) {
            return false;
    }

    $tries++;
}

$image是 Picture 类型的对象,它只是我需要的与修改图片相关的所有类型的功能的包装类。

$config是我的配置数组,其中包括所有类型的预定义值。

$tries保存允许的尝试次数。该程序允许调整图像大小不超过 10 次。

getFileSize()通过 return filesize( path )返回图像文件大小

resize(maxWidth,maxHeight,factor)将图像调整为参数中提到的大小。调整图片大小后,将结果保存到相同的路径,从中读取文件大小。

我将发布 resize() 和 getFileSize() 方法,因为您可能会感兴趣:

function resize($neededwidth, $neededheight, $factor) {

    $oldwidth = $this->getWidth($this->file_path);
    $oldheight = $this->getHeight($this->file_path);
    $neededwidth = $neededwidth * $factor;
    $neededheight = $neededheight * $factor;
    $fext = $this->getInnerExtension();

    $img = null;
    if ($fext == ".jpeg" ) {
        $img = imagecreatefromjpeg($this->file_path);
    } elseif ($fext == ".png") {
        $img = imagecreatefrompng($this->file_path);
    } elseif ($fext == ".gif") {
        $img = imagecreatefromgif($this->file_path);
    } else {
        return false;
    }

    $newwidth = 0;
    $newheight = 0;
    if ($oldwidth > $oldheight && $oldwidth > $neededwidth) { // Landscape Picture
        $newwidth = $neededwidth;
        $newheight = ($oldheight / $oldwidth) * $newwidth;      
    } elseif ($oldwidth < $oldheight && $oldheight > $neededheight) { // Portrait Picture
        $newheight = $neededheight;
        $newwidth = ($oldwidth / $oldheight) * $newheight;
    }

    $finalimg = imagecreatetruecolor($newwidth,$newheight);
    imagecopyresampled($finalimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);

    if ($fext == ".jpeg" ) {
        if ( !imagejpeg($finalimg, $this->file_path, 100) ) return false;
    } elseif ($fext == ".png") {
        if ( !imagepng($finalimg, $this->file_path, 9) ) return false;
    } elseif ($fext == ".gif") {
        if ( !imagegif($finalimg, $this->file_path) ) return false;
    } else {
        return false;
    }

    imagedestroy($img);
    return true;
}

获取文件大小()

function getFileSize() {

        return filesize($this->file_path);
}

谢谢!

4

1 回答 1

9

试试http://www.php.net/manual/en/function.clearstatcache.php

function getFileSize() {
    clearstatcache();
    return filesize($this->file_path);
}
于 2013-05-22T15:40:26.177 回答