使用CodeIgniter动态调整图像大小

时间:2011-03-28 16:04:15

标签: php codeigniter image-manipulation

我正在开发一个从Dropbox下载文件的脚本,它应该调整该图像的大小,然后将其拍摄到S3存储桶。

出于某种原因,我无法让图像调整大小。

我一直收到以下错误:
图像的路径不正确。 您的服务器不支持处理此类图像所需的GD功能。

代码库:

public function resize_test() {
            $postcard_assets = $this->conn->getPostcardDirContent("folder_name", "Photos", TRUE);

            foreach($postcard_assets['contents'] as $asset) {
                $file = pathinfo($asset['path']);
                $original_file = $this->conn->downloadFile($asset['path']);

                $raw_file = sha1($file['basename']);
                $s3_file_name = "1_{$raw_file}.{$file['extension']}";
                $this->resize_photo($original_file);
                $this->s3->putObject($s3_file_name, $original_file, 's3-bucket-name', 'public-read');

                $s3_check = $this->s3->getObjectInfo($s3_file_name, 's3-bucket-name');

                if($s3_check['content-length'] > 0) {
                    krumo($s3_check);
                    exit();
                }
            }
        }

private function resize_photo($photo) {
            $config['image_library'] = 'imagemagick';
            $config['source_image'] = $photo;
            $config['maintain_ratio'] = TRUE;
            $config['width']     = 640;
            $config['height']   = 480;

            $this->load->library('image_lib', $config);

            if(!$this->image_lib->resize()) {
                exit($this->image_lib->display_errors());
            }
        }

Dropbox API DownloadFile:

    public function downloadFile($file) {
        $this->setTokens();
        return $this->conn->getFile($file);
    }

任何人都知道我可能做错了什么?

7 个答案:

答案 0 :(得分:14)

多次加载image_lib。在autoload libs中添加image_lib并更改

$this->load->library('image_lib', $config);

$this->image_lib->initialize($config);

答案 1 :(得分:4)

我正在使用ImageMagick进行CI调整大小,就像你一样。您需要以下内容才能实现此目的:

  • 应安装imagemagick。您可以使用'convert'命令从命令行测试它
  • 需要安装imagick,这是绑定到imagemagick的PHP库
  • ImageMagick本身依赖于各种其他库,如libjpeg和libpng。确保它们也已安装

Simpy做一个phpinfo()并向下滚动到'imagick'。检查它是否存在,然后检查“支持的文件格式”标题,看看你想要调整大小的文件类型是否存在。

如果以上所有内容都是正确的并且仍然不起作用,那么您不应该忘记在代码中包含imagemagick的路径:

$config['library_path'] = '/usr/local/bin';

我之前经历过所有这些痛苦,所以我希望这可以帮助你:)。

答案 2 :(得分:3)

对于多个调整大小以下代码适合我。

    $config['create_thumb'] = FALSE; //to avoid _thumb prefixing
    $config['maintain_ratio'] = TRUE;
    $config['width'] = 250;
    $config['height'] = 250;
    $config['new_image'] = 'thumb_250x250_'.$file_name; // new name
    $CI->load->library('image_lib', $config, 'abc'); //abc to avoid instance caching.
    $CI->abc->resize();
    unset($CI->abc); //unsetting instance.
    $config['width'] = 100;
    $config['height'] = 100;
    $config['new_image'] = 'thumb_100x100_'.$file_name; // new name
    $CI->load->library('image_lib', $config, 'xyz'); // xyz to avoid instance caching.
    $CI->xyz->resize();
    unset($CI->xyz); // unsetting instance.

答案 3 :(得分:0)

您需要在$config['new_image'] = '/path/to/new_image.jpg';功能中使用resize_photo

阅读http://codeigniter.com/user_guide/libraries/image_lib.html

答案 4 :(得分:0)

实际上您正在尝试加载图像库两次。由于您还在同一行上初始化配置数组,因此数组永远不会加载到库中。

将您的代码更改为:

    //this
    $this->load->library('image_lib', $config);


    //to this
    $this->load->library('image_lib');
    $this->image_lib->initialize($config);

它会完美运作。

答案 5 :(得分:0)

在尝试调整原始图像大小之前,查看是否可以实际打开原始保存的图像。我在使用preg_replace时解码了base64上传的图像。出于某种原因,我仍然无法追踪......它正在像这样删除

$file = preg_replace('/data.*base64,/', '', chunk_split($this->post('myimg'));

它会返回:[删除] / 9 ....等等。当base64解码时......显然不是有效的图像文件..所以调整大小不会起作用。我不得不添加一个

$file = substr($file,9);

然后删除[已删除]。额外的工作,并带我去弄清楚,但现在我可以调整图像大小。

Side Question ...为什么preg_replace添加[删除] ???叹息...... php。

答案 6 :(得分:0)

//将控制器命名为“image.php”     

class Image extends CI_Controller {

 public function index($width, $height, $image_path)
    {   
        $config['image_library'] = 'gd2';
        $config['source_image'] = './uploads/'.$image_path;
        $config['dynamic_output'] = TRUE;
        $config['maintain_ratio'] = TRUE;
        $config['width'] = $width;
        $config['height'] = $height;

        $this->load->library('image_lib', $config); 
        $this->image_lib->initialize($config);
        echo $this->image_lib->resize();
    }
}

?>
//Call from view page
<img src="<?php echo ("index.php/image/index/150/150/".$luserdata[0]'profile_image']);?>"      alt="resized mage1"/>