2016-02-11 49 views
0

我希望你們能幫助我與我的代碼走的更遠,是因爲我卡住。在編寫代碼時,我完全迷茫了自己,所以我需要一點幫助,在當前的實現中有什麼可能,哪些不是。操縱與ImageMagick庫圖像笨

因此,這裏是我的笨代碼,上傳圖片,並試圖與這些文件操作。

public function addImagesToProduct_post(){ 
     $id_product = $this->input->post('id_product'); 

     $data = array(); 
     $count = count($_FILES['files']['size']); 
     foreach($_FILES as $key=>$value) { 
      for ($s = 0; $s <= $count - 1; $s++) { 
       $_FILES['userfile']['name'] = $value['name'][$s]; 
       $_FILES['userfile']['type'] = $value['type'][$s]; 
       $_FILES['userfile']['tmp_name'] = $value['tmp_name'][$s]; 
       $_FILES['userfile']['error'] = $value['error'][$s]; 
       $_FILES['userfile']['size'] = $value['size'][$s]; 
       $config['upload_path'] = $_SERVER['DOCUMENT_ROOT'] . "/images/"; 
       $config['allowed_types'] = 'jpg|jpeg|png'; 
       $config['max_width'] = 1920; 
       $config['max_height'] = 1080; 
       $config['remove_spaces'] = TRUE; 
       $this->upload->initialize($config); 
       if($this->upload->do_upload()){ 
        $currentImage = $this->upload->data(); 
        $this->load->library('image_lib'); 
        $imgConfig['image_library'] = 'ImageMagick'; 
        $imgConfig['source_image'] = $currentImage['full_path']; 
        $imgConfig['create_thumb'] = TRUE; 
        $imgConfig['thumb_marker'] = TRUE; 
        $imgConfig['maintain_ratio']= TRUE; 
        $imgConfig['width']   = 1024; 
        $imgConfig['wm_text'] = 'MY watermark'; 
        $imgConfig['wm_font_size'] = '32'; 
        $imgConfig['wm_vrt_alignment'] = 'bottom'; 
        $imgConfig['wm_hor_alignment'] = 'right'; 
        $imgConfig['wm_padding'] = '20'; 
        $imgConfig['wm_type'] = 'text'; 
        $this->image_lib->initialize($imgConfig); 
        $this->image_lib->watermark(); 
        /////////////////////////// 
        //// SAVE STUFF TO DB ///// 
        /////////////////////////// 
        $data['imgData'] = $this->upload->data(); 
        $data['success'] = true; 
       }else{ 
        $data['messageErrorAddPicture'] = str_replace("<p>", '', str_replace("</p>", '', $this->upload->display_errors())); 
        $data['addImageFail'] = true; 
        $data['success'] = false; 
       } 
       echo json_encode($data); 
      } 
     } 
     //echo json_encode($data);  
    } 

我的目標(寫,如果可能在我目前的執行情況和提供例如請):
1.上傳圖像,而不是更大然後HD
2.壓縮當前上傳的圖片是小於100KB
3.將圖像大小改爲最大寬度1024 x 786(但如果用戶拍攝垂直放置的圖片,會發生什麼情況?)
4.創建當前圖像的縮略圖
5.設置縮略圖大小爲250 x 250
6.將它放在拇指文件夾下(其中在裏面的圖像文件夾)

我的問題是:
1.如何壓縮當前圖像小於100kb?
2.如果我將當前圖像調整爲1024寬度,如何處理垂直圖像?
3.如何指定縮略圖大小和商店位置?

如果您需要任何額外的信息,請讓我知道,我會提供。謝謝你在前進

+0

我們需要的附加信息是:問題的精確定義。 – GluePear

+0

我更新了一個問題,並解決了我的問題 –

回答

2

我終於設法使它工作。 這就是我的控制器現在的樣子

public function addImagesToProduct_post(){ 
    $id_product = $this->input->post('id_product'); 
    $prod = $this->Model_products->get($id_product); 
    $prodImages = json_decode($prod[0]->images, true); 
    $imgLastPosition = count($prodImages); 

    $data = array(); 
    $count = count($_FILES['files']['size']); 
    foreach($_FILES as $key=>$value) { 
     for ($s = 0; $s <= $count - 1; $s++) { 
      $_FILES['userfile']['name'] = $value['name'][$s]; 
      $_FILES['userfile']['type'] = $value['type'][$s]; 
      $_FILES['userfile']['tmp_name'] = $value['tmp_name'][$s]; 
      $_FILES['userfile']['error'] = $value['error'][$s]; 
      $_FILES['userfile']['size'] = $value['size'][$s]; 
      $config['upload_path'] = $_SERVER['DOCUMENT_ROOT'] . "/images/products/"; 
      $config['allowed_types'] = 'jpg|jpeg|png'; 
      $config['remove_spaces'] = TRUE; 
      $this->upload->initialize($config); 
      if($this->upload->do_upload()){ 
       $currentImage = $this->upload->data(); 
       $this->load->library('image_lib'); 
       $this->resize_big_image($currentImage['full_path'], $currentImage['file_name']); 
       $this->resize($currentImage['full_path'], $currentImage['file_name']); 
       $newImage['id_image'] = $imgLastPosition; 
       $newImage['thumbImage'] = '/home/valor/development/euro-swap.com/public_html/images/products/'. 
         $currentImage['raw_name'].'_thumb'.$currentImage['file_ext']; 
       $newImage['thumbName'] = $currentImage['raw_name'].'_thumb'.$currentImage['file_ext']; 
       $newImage['image'] = '/home/valor/development/euro-swap.com/public_html/images/products/large'. 
         $currentImage['raw_name'].$currentImage['file_ext']; 
       $newImage['imageName'] = $currentImage['raw_name'].$currentImage['file_ext']; 
       $newImage['position'] = $imgLastPosition; 
       array_push($prodImages, $newImage); 
       $data['imgData'] = $prodImages; 
       $this->Model_products->updateProductImages($id_product, json_encode($prodImages)); 
       $data['success'] = true; 
      }else{ 
       $data['messageErrorAddPicture'] = str_replace("<p>", '', str_replace("</p>", '', $this->upload->display_errors())); 
       $data['addImageFail'] = true; 
       $data['success'] = false; 
      } 
     } 
     $imgLastPosition++; 
    } 
    echo json_encode($data); 
} 

private function resize_big_image($path, $file){ 
    $config['image_library'] = 'GD2'; 
    $config['source_image']  = $path; 
    $config['maintain_ratio'] = TRUE; 
    $config['master_dim'] = 'auto'; 
    $config['quality'] = '70%'; 
    $config['width'] = 1024; 
    $config['height'] = 768; 
    $config['new_image'] = $_SERVER['DOCUMENT_ROOT'] . "/images/products/large/" . $file; 
    $this->image_lib->initialize($config); 
    $this->image_lib->resize(); 

    $config['source_image'] = $_SERVER['DOCUMENT_ROOT'] . "/images/products/large/" . $file; 
    $config['wm_text'] = 'My page'; 
    $config['wm_type'] = 'text'; 
    $config['wm_font_path'] = './system/fonts/texb.ttf'; 
    $config['wm_font_size'] = '32'; 
    $config['wm_font_color'] = '000000'; 
    $config['wm_vrt_alignment'] = 'bottom'; 
    $config['wm_hor_alignment'] = 'right'; 
    $config['wm_padding'] = '250'; 
    $this->image_lib->initialize($config); 
    $this->image_lib->watermark(); 

} 

private function resize($path, $file) { 
    $config['image_library'] = 'GD2'; 
    $config['source_image']  = $path; 
    $config['create_thumb']  = TRUE; 
    $config['maintain_ratio'] = false; 
    $config['thumb_marker']  = '_thumb'; 
    $config['master_dim'] = 'auto'; 
    $config['width'] = 242; 
    $config['height'] = 242; 
    $config['new_image'] = $_SERVER['DOCUMENT_ROOT'] . "/images/products/" . $file; 
    $this->image_lib->initialize($config); 
    $this->image_lib->resize(); 
}