ошибка изменения размера изображения в цикле в codeigniter - PullRequest
0 голосов
/ 16 февраля 2011

У меня проблема при загрузке и изменении размера изображений в цикле.

Может кто-нибудь предоставить мне рабочий образец кода codeigniter для одновременной загрузки и изменения размера в цикле.

Я хочу загрузить и изменить размеры изображений, загруженных из формы.Там будет более 1 изображений, поэтому я должен загрузить их в цикле.

Мой код сначала загружает изображение, а затем изменяет его размер.1ts изображения загружаются и изменяются в размерах правильно, но во 2-м цикле изображение загружается, но не изменяется.Выдает следующее сообщение об ошибке:

Ваш сервер не поддерживает функцию GD, необходимую для обработки изображений этого типа.

Я также пробовал очистить функцию

$this->image_lib->clear(); 

может кто-нибудь помочь, пожалуйста

Ответы [ 5 ]

13 голосов
/ 14 июля 2011

Не загружайте image_lib несколько раз.Добавьте image_lib в библиотеки автозагрузки и измените

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

на

$this->image_lib->initialize($config);
6 голосов
/ 16 июня 2011

У меня была такая же проблема, но, похоже, это сработало:

    // Do upload
    if (! $this->upload->do_upload($image_name)) {
        // return errors
         return array('errors' => $this->upload->display_errors());
    }

    $data = $this->upload->data();

    $config_manip = array(
        'image_library' => 'gd2',
        'source_image' => "./assets/uploads/{$data['file_name']}",
        'new_image' => "./assets/uploads/thumbs/{$data['file_name']}",
        'create_thumb' => true,
        'thumb_marker' => '',
        'maintain_ratio' => true,
        'width' => 140,
        'height' => 140
    );
    // Create thumbnail
    $this->load->library('image_lib');
    $this->image_lib->resize();
    $this->image_lib->clear();
    $this->image_lib->initialize($config_manip);

    if ( ! $this->image_lib->resize()){
        return array('errors' => $this->image_lib->display_errors());
    }

Обратите внимание, что миниатюра создания выглядит так: Загрузить библиотеку, Изменить размер изображения, ЧИСТО, Инициализировать конфигурацию

Я ставил сброс после инициализации, которая вызывала ту же ошибку, что и вы.

2 голосов
/ 17 октября 2014

Вот рабочий код из моего контроллера галереи изображений. Эта функция загружает пакет изображений, изменяет их размер и сохраняет их в базе данных.

public function create_photo_batch() {      
$this->load->library('image_lib');
$this->load->library('upload');

// Get albums list for dropdown
$this->data['albums']   = $this->gallery_m->get_albums_list();

if(isset($_FILES['images']) && $_FILES['images']['size'] > 0) {
  $album_id = $this->input->post('albumid');
  $images = array();
  $ret = array();

  // Upload
  $files = $_FILES['images'];
  foreach ($files['name'] as $key => $image) {
    $_FILES['images[]']['name']= $files['name'][$key];
    $_FILES['images[]']['type']= $files['type'][$key];
    $_FILES['images[]']['tmp_name']= $files['tmp_name'][$key];
    $_FILES['images[]']['error']= $files['error'][$key];
    $_FILES['images[]']['size']= $files['size'][$key];

    $upload_config = array(
      'allowed_types' => 'jpg|jpeg|gif|png',
      'upload_path' => realpath(APPPATH . "../uploads/gallery"),
      'max_size'    => 5000,
      'remove_spaces' => TRUE,
      'file_name'   => md5(time())
    );
    $this->upload->initialize($upload_config);

    if ($this->upload->do_upload('images[]')) {
      $image_data = $this->upload->data();  
      $images[] = $image_data['file_name']; 
    } else {
      $this->session->set_flashdata('error', $this->upload->display_errors() );
      redirect('admin/gallery/create_photo_batch');
    }
  }

  // Resize
  foreach ($images as $image) {
        $resize_config = array(
            'source_image'      => realpath(APPPATH . '../uploads/gallery') .'/'. $image,
            'new_image'             => realpath(APPPATH . '../uploads/gallery/thumbs'),
            'maintain_ratio'    => TRUE,
            'width'                     => 500,
            'height'                    => 500
        );
        $this->image_lib->initialize($resize_config);

        if ( ! $this->image_lib->resize() ) {
      echo $this->image_lib->display_errors(); 
      die;
    }
        $this->image_lib->clear();
  }

  // Save to db
  foreach ($images as $image) {
    $ret[] = array(
      'AlbumID' => (int) $album_id, 
      'Url' => $image,
      'IsActive' => 1
    );
  }    

  $this->gallery_m->save_images($ret);
  redirect('admin/gallery/album/'.$album_id);       
}

//Load view
$this->data['subview'] = 'admin/gallery/photo_upload_batch_view';
$this->load->view('admin/_layout_main', $this->data);

}

0 голосов
/ 10 июня 2018
$config['image_library'] = 'gd2';

        $config['source_image'] = './assets/upload_images/A.jpg';
        $config['create_thumb'] = FALSE;
        $config['maintain_ratio'] = TRUE;
        $config['width']         = 1600;
        $config['height']       = 900;
        $config['new_image']       = './assets/upload_images/'.$randy;

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

У меня была та же проблема, но я решил ее с помощью этого кода.

0 голосов
/ 16 февраля 2011

Ваше сообщение об ошибке предполагает, что проблема не в цикле, а в том, что второй файл имеет другой тип файла, чем первый. И что на базовом сервере нет необходимых библиотек (http://www.libgd.org/Main_Page) для обработки файлов этого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...