将图像名称保存在数据库中并爆炸以追加后缀?如何从模特展示?

时间:2015-10-30 09:20:44

标签: php codeigniter

我在db中有以下表格:

IMAGES

  • image_id(1)
  • image_name(imagename.jpg)

但是在服务器上我有5个版本的相同图像。 imagename_500.jpg

imagename_200.jpg

imagename_100.jpg

等......其中imagename是uniqid()。

所以在这一刻我得到了图像名称,爆炸了。在控制器中追加后缀和扩展名并在视图中显示。

这是最佳做法还是应该为扩展添加另一列?还是应该将所有5个名称保存在5列中?

接下来的问题是如何从模型中获取带后缀的imagename?

这是我的模型方法:

    function entries_by_limit($start, $limit) {
    $this->db->select('a.*');
    $this->db->select('b.nume_imagine', false);
    $this->db->from("$this->_table a");
    $this->db->join('imagini_produse b', "b.$this->_primary_key = a.id_produs", "left");
    $this->db->limit($limit, $start);
    $result = $this->db->get();
    //print_r($this->db->last_query());
    return $result->result();
}

但我想让我的控制器保持干净,不想在那里爆炸。

所以第二个问题是如何通过将分辨率作为第三个参数传递并在模型中处理图像名称来获取我的图像?

$data['products']       = $this->products->entries_by_limit($start, $limit, 500);

并将图像返回为imagename_500.jpg

2 个答案:

答案 0 :(得分:0)

我认为保留数据库是更好的主意 只存储文件名,然后将文件名传递给具有2个参数的函数 如下图所示

function  img_size ($img, $size) {
    $info = pathinfo($img);
$img_name = $info['filename'];
$img_ext = $info['extension'];
$img_size = $img_name . '_' . $size .'.'. $img_ext ;
 return $img_size ;
}


$img = 'imagename.jpg';
$img_200 = img_size($img, 300);
echo $img_200 ;

你会得到这个结果 imagename_300.jpg
传递图像名称和所需的大小 因此,将来如果您添加更多尺寸或删除远离数据库的尺寸

答案 1 :(得分:0)

这解决了我的问题:

    function entries_by_limit($start, $limit, $rez) {
    $this->db->select('a.*');
    $this->db->select('b.nume_imagine', false);
    $this->db->from("$this->_table a");
    $this->db->join('imagini_produse b', "b.$this->_primary_key = a.id_produs", "left");
    $this->db->limit($limit, $start);
    $result = $this->db->get();
    foreach($result->result() as $single) {

        if($single->nume_imagine)
            $single->nume_imagine = $this->parse_image($single->nume_imagine, $rez);
    }

    return $result->result();
}

function parse_image($image_name, $rez){

        $image = explode('.', $image_name);
        return $image[0].'_'.$rez.'.'.$image[1];
}

并从控制器致电:

$data['produse']        = $this->produse->entries_by_limit($start, $limit, '270');

不知道是否是一个好习惯。