2010-03-16 11 views
3

Codeigniter의 이미지 조작 라이브러리를 사용하여 업로드 된 이미지의 크기를 작게, 크게, 크게로 3 가지로 조정합니다.Codeigniter 이미지 조작 클래스는 이미지 크기를 조정하는 동안 이미지를 회전합니다.

리사이징이 잘 작동합니다. 그러나 세로 이미지의 크기를 조정하면 라이브러리가 이미지를 가로로 회전합니다.

이 자리에서 내가 가지고있는 구성 설정은 다음과 같습니다

 $this->resize_config['image_library'] = 'gd2'; 
    $this->resize_config['source_image'] = $this->file_data['full_path']; 
    $this->resize_config['maintain_ratio'] = TRUE; 

    // These change based on the type (small, normal, large) 
    $this->resize_config['new_image'] = './uploads/large/'.$this->new_file_name.'.jpg'; 
    $this->resize_config['width'] = 432; 
    $this->resize_config['height'] = 288; 

기본이 내가 원하는 무엇 인 자동으로 설정하기 때문에이 master_dim 속성을 설정하고 있지 않다.

제 가정은 라이브러리가 세로 이미지를 가져 와서 높이가 너비보다 크고 높이/너비 구성을 적절하게 변환하여 이미지가 세로로 유지된다는 것입니다.

어떤 일이 일어나고 있는지 (분명히) 라이브러리는 이미지가 수직 일 때 이미지를 회전시키고 구성별로 크기를 조정합니다.

 log_message('debug', 'attempting '.$size.' photo resize'); 
     $this->CI->load->library('image_lib'); 
     $this->CI->image_lib->initialize($this->resize_config); 
     if ($this->CI->image_lib->resize()) 
     { 
       $return_value = TRUE; 
       log_message('debug', $size.' photo resize successful'); 
     } 
     else 
     { 
      $this->errors[] = $this->CI->image_lib->display_errors(); 
      log_message('debug', $size.' photo resize failed'); 
     } 
     $this->CI->image_lib->clear(); 
     return $return_value; 

편집

나는 문제가 업로드 라이브러리에서 할 수있다 생각한다

내가 실제 재 크기 조정을 할 필요가 장소에 코드입니다. 업로드에서 image_height 및 image_width를 다시 가져올 때 세로 이미지를 업로드했지만 너비가 더 커진 것처럼 보입니다. 이 로그의 결과입니다

 $this->is_vertical = $this->file_data['image_height'] > $this->file_data['image_width']; 
    log_message('debug', 'image height:'.$this->file_data['image_height']); 
    log_message('debug', 'image width:'.$this->file_data['image_width']); 
    if ($this->is_vertical) 
    { 
     $this->resize_config['master_dim'] = 'height'; 
    } 
    else 
    { 
     $this->resize_config['master_dim'] = 'width'; 
    } 
    log_message('debug', 'master_dim setting:'.$this->resize_config['master_dim']); 

: 내가 값을 확인하는 몇 가지 로깅을 추가

 $this->upload_config['allowed_types'] = 'jpg|jpeg'; 
    $this->upload_config['max_size'] = '2000'; 
    $this->upload_config['max_width'] = '0'; 
    $this->upload_config['max_height'] = '0'; 
    $this->upload_config['upload_path'] = './uploads/working/'; 


    $this->CI->load->library('upload', $this->upload_config); 
    if ($this->CI->upload->do_upload($this->posted_file)) 
    { 
     $this->file_data = $this->CI->upload->data(); 
     $return_value = TRUE; 
     log_message('debug', 'upload successful'); 
    } 

:

내가 사진을 업로드하기 위해 사용하고 코드의 일부입니다 :

DEBUG - 2010-03-16 18시 35분 6초 -> 상 높이 : 1,536 DEBUG - 2010-03-16 18시 35분 6초 -> 화상 폭 : 2,048 DEBUG - 2010-03 -16 18:35:06 -> master_dim 설정 : 포토샵에서 이미지를 보면 폭

, 이러한 치수는 다음과 같습니다

높이 : 2048 폭 : 1536

누구나 업로드 라이브러리가이 작업을 수행하는 원인이 될 수 있습니다 알고 ?

답변

0

Ok - 포토샵을 신뢰하지 않기로 결정하여 퀵타임과 사파리에서 테스트했던 이미지를 열었습니다. 나는 그들이 실제로 여전히 수평이라는 것을 발견했다.

그래서 Codeigniter는 예상대로 작동합니다.

나는 포토샵으로 돌아가서 테스트 이미지에서 웹 저장을하고 다시 업로드했으며 예상대로 작동했다.

그런 다음 추가 된 코드를 제거하여 이미지가 세로인지, 라이브러리가 예상대로 작동하는지 테스트했습니다.

이제 최종 사용자가이 정확한 작업을 수행하지 못하게하는 방법을 알아야합니다.

내 질문에 대답하는 시간을내어 주셔서 감사합니다 musoNic80. 바라건대 다른 사람이 내 실수에서 배울 수 있기를 바랍니다.

+0

다행스럽게 생각합니다. 다음 비트를 알아내는 것만으로 좋은 표정! – musoNic80

+0

최종 사용자가 동일한 작업을 수행하지 못하도록 보호하는 좋은 방법을 알고 있습니까? 나는 똑같은 문제를 겪고있다. 이미지는 오른쪽으로 보이지만 사파리에서 열면 옆쪽으로 보입니다. – Catfish

+0

나는 이것을하는 좋은 방법을 찾지 못했지만 솔직히 말해서 나는 그것에 많은 시간을 투자하지 않았다. – someoneinomaha

1

필자는이 라이브러리를 사용한 적이 없지만 설명서를 읽은 후 master_dim 속성이 도움이되는지 궁금합니다. 올바른 이미지를 유지할 수있는 세로 이미지의 경우 '높이'로 설정하면됩니다. 조건부를 통해 각 이미지를 구문 분석하여 이미지가 세로로 정렬되어 있는지 확인한 다음 필요할 경우에만이 속성을 설정하면됩니다. 다른 생각은 maintain_ratio 속성에 관한 것입니다. 문서에서는이 값을 'TRUE'로 설정하면 종횡비를 유지하면서 가능한 한 목표 값에 가깝게 크기가 조정됩니다. 이미지를 회전하면 더 정확하게이 비율을 유지할 수 있다고 생각하는지 궁금합니다. 실험을 위해 수직 이미지의 경우이 값을 '거짓'으로 설정하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 오늘 밤에이 기회를 줄 것이다. 그래도 도서관이 그 방향을 올바르게 설정하는 것을 처리 할 것이라고 생각하지 않습니까? 설명서를 보면 소리처럼 들립니다. – someoneinomaha

+0

위의 수정 사항을 참조하십시오. 업로드 클래스가 업로드 된 사진의 높이와 너비 정보를 부정확하게 다시 가져 오는 것을 발견했습니다. – someoneinomaha

관련 문제