Вопросы | codeigniter

Как я могу изменить эту функцию манипуляции с изображениями, сделанную в codeigniter, чтобы быть более эффективной

Вопрос

Anonymous | 3560 просмотров | рейтинг: 2

Я думаю, что эта функция не так эффективна, как должна быть. Я был бы признателен за некоторые предложения о том, как я могу структурировать его, чтобы быстрее и занимать меньше памяти. Вот что делает код: проверяет, было ли загружено изображение добавить информацию об этом (теги, имя, детали) в базу данных если переменная была установлена, поверните изображение если изображение шире 600 пикселей, измените его размер создать эскиз Я думаю, что неэффективность заключается в том, что шаги 3,4,5 все разделены. Есть ли способ их консолидировать? Благодарность! Функция

  function insert()
  {
    $config[upload_path] = ./uploads/;
    $config[allowed_types] = jpg;
    $config[max_size] = 5000;
    $config[max_width]  = 4096;
    $config[max_height]  = 4096;

    $this->load->library(upload, $config);

    if (!$this->upload->do_upload())
    {
      $data = array(error => $this->upload->display_errors());

      $data[title] = "Add Photo | Mark The Dark";
      $this->load->view(photo_add_view, $data);
    }
    else
    {
      //get uploaded image info
      $data = array(upload_data => $this->upload->data());

      //clean the data
      $data = $this->input->xss_clean($data);

      //get orientation info and erase it from POST variable
      //$orientation = $_POST[orientation];
      //unset($_POST[orientation]);

      //grab the tags
      $tags = $_POST[tags];
      unset($_POST[tags]);

      //add in some other stuff
      $_POST[time] = date(YmdHis);
      $_POST[author] = $this->dx_auth->get_user_id();

      //insert it in the database
      $this->db->insert(photos, $_POST);
      $photo_id = $this->db->insert_id();

      //add stuff to tags table
      /*
      $tags_array = preg_split(/[/s,;]+/, $tags);
      foreach($tags_array as $tag)
      {
        if($tag != "" || $tag != null)
          $this->db->insert(tags, array(id => $photo_id, word => $tag));
      }*/

      //CXtags
      /*$tags_array = preg_split(/[/s,;]+/, $tags);
      foreach($tags_array as $tag)
      {
        if($tag == "" || $tag == null)
        {unset($tags_array[$tag]);}
      }
      */
      $tags_array = $this->CXTags->comma_to_array($tags);
      foreach($tags_array as $tag)
      {$tags_array[$tag] = $this->CXTags->make_safe_tag($tag);}
      $topass = array(
        table => photos,
        tags => $tags_array,
        row_id => $photo_id,
        user_id => $_POST[author]
      );
      $this->CXTags->add_tags($topass);

      //rename the file to the id of the record in the database
      rename("./uploads/" . $data[upload_data][file_name], "./uploads/" . $photo_id . ".jpg");

      list($width, $height, $type, $attr) = getimagesize("./uploads/" . $photo_id . .jpg);


      if (($orientation == 1) || ($orientation == 2))
      {
        //echo $orientation;
        //rotate image
        $config[image_library] = GD2;
        $config[source_image] = ./uploads/ . $photo_id . .jpg;
        if ($orientation == 1)
        {
          $config[rotation_angle] = 270;
        }
        elseif ($orientation == 2)
        {
          $config[rotation_angle] = 90;
        }
        $this->load->library(image_lib, $config);
        $this->image_lib->initialize($config);
        if(!$this->image_lib->rotate())
        {
          echo $this->image_lib->display_errors();
        }
      }


      $this->load->library(image_lib);
      if ($width > 600)
      {
        //resize image
        $config[image_library] = GD2;
        $config[source_image] = ./uploads/ . $photo_id . .jpg;
        $config[new_image] = ./uploads/photos/ . $photo_id . .jpg;
        $config[create_thumb] = FALSE;
        $config[maintain_ratio] = TRUE;
        $config[width] = 600;//180
        $config[height] = 480;
        $config[master_dim] = width;
        $this->image_lib->initialize($config);
        $this->load->library(image_lib, $config);
        if(!$this->image_lib->resize())
        {
          echo $this->image_lib->display_errors();
        }
      }
      else
      {

        $source = ./uploads/ . $photo_id . .jpg;
        $destination = ./uploads/photos/ . $photo_id . .jpg;
        rename($source, $destination);
      /*//buggy php???
        $result = copy($source, $destination);
        echo "HO" . $result;
        */

      }

      //create thumbnail
      $config[image_library] = GD2;
      $config[source_image] = ./uploads/photos/ . $photo_id . .jpg;
      $config[new_image] = ./uploads/thumbnails/ . $photo_id . .jpg;
      $config[create_thumb] = TRUE;
      $config[thumb_marker] = _thumb;
      $config[maintain_ratio] = TRUE;
      $config[width] = 180;//180
      $config[height] = 100;
      $config[master_dim] = width;
      $this->image_lib->initialize($config);
      $this->load->library(image_lib, $config);
      $this->image_lib->resize();

      redirect(photo/show/ . $photo_id);

    }

    //redirect(photo/photo_add/);
  }
 



Ответы

MrChrister

+ 0 -
Вы можете хранить свои конфиги в другом месте в соответствии с документацией codeigniter, что бы сжать код. Я не знаю, как вы могли связать эти события.  


Rich

+ 2 -
Для всей работы, необходимой для манипулирования изображениями с использованием объектов, предоставляемых вам воспламенителем кода, вы можете попробовать сделать это самостоятельно с помощью функций gd в php. Я не использовал воспламенитель кода, но я сделал много вещей с манипуляциями с изображениями в php, и это не очень сложно. Просто глядя на ваш код, и я предполагаю, что это способ воспламенения кода, я вижу, что вы вызываете image_lib->initialize() и load->library() для каждой отдельной манипуляции. Я бы заглянул внутрь этих методов и методов rotate() и resize(), которые вы используете, и посмотрел, создают ли они и уничтожают ли ресурс изображения с помощью каждая манипуляция. Если вы используете библиотеку gd, вы можете повторно использовать один и тот же ресурс изображения для каждого шага, а затем просто записать его в файл, когда будете готовы (повторно используйте этот же ресурс изображения для создания эскиза). Это, вероятно, значительно увеличит производительность как по скорости выполнения, так и по объему используемой памяти. GD функции в PHP


Теги

codeigniter | resize | gd