Intereting Posts
PHP – Доступ к элементу массива в пределах одного массива Почему этот вызов PHP для json_encode бесшумно терпит неудачу – неспособность обрабатывать одиночные кавычки? Bootstrap Modal Войти с помощью AJAX Как получить только один результат из foreach (PHP) Разместить результаты PHP внутри HTML-страницы Zend_Session: очистить $ _SESSION до начала вызова Какие решения для корзин с открытым исходным кодом PHP имеют функции, которые приносят мне пользу в качестве веб-разработчика? Поиск класса, на который нажата кнопка JSON – косые черты не ускользают Ошибка SMTP с PHPMailer EHLO не поддерживается Как убить все / php-сессии? Отображать переменную во время создания анонимной функции PHP .htaccess 403 Запрещено, если url содержит каталог с другим файлом htaccess Создайте механизм для передачи положительного целого числа и отобразите все значения серии Фибоначчи до и включите указанное значение Как найти последний день месяца с даты?

Изменение размера изображения на лету с помощью CodeIgniter

Я работаю над скриптом, который загружает файл из Dropbox, который должен изменить размер этого изображения, а затем снимать его до ведра S3.

По какой-то причине я не могу изменить размер изображения.

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

База кода:

public function resize_test() { $postcard_assets = $this->conn->getPostcardDirContent("folder_name", "Photos", TRUE); foreach($postcard_assets['contents'] as $asset) { $file = pathinfo($asset['path']); $original_file = $this->conn->downloadFile($asset['path']); $raw_file = sha1($file['basename']); $s3_file_name = "1_{$raw_file}.{$file['extension']}"; $this->resize_photo($original_file); $this->s3->putObject($s3_file_name, $original_file, 's3-bucket-name', 'public-read'); $s3_check = $this->s3->getObjectInfo($s3_file_name, 's3-bucket-name'); if($s3_check['content-length'] > 0) { krumo($s3_check); exit(); } } } private function resize_photo($photo) { $config['image_library'] = 'imagemagick'; $config['source_image'] = $photo; $config['maintain_ratio'] = TRUE; $config['width'] = 640; $config['height'] = 480; $this->load->library('image_lib', $config); if(!$this->image_lib->resize()) { exit($this->image_lib->display_errors()); } } 

Dropbox API DownloadFile:

  public function downloadFile($file) { $this->setTokens(); return $this->conn->getFile($file); } 

Кто-нибудь знает, что я могу делать неправильно?

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

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

в

 $this->image_lib->initialize($config); 

Я делаю изменение размера изображения с помощью CI, используя ImageMagick так же, как и вы. Для этого вам понадобится следующее:

  • необходимо установить imagemagick. Вы можете проверить его из командной строки с помощью команды «convert»
  • imagick необходимо установить, это библиотека PHP, которая связывается с imagemagick
  • Сам ImageMagick зависит от других библиотек, таких как libjpeg и libpng. Убедитесь, что они установлены также

Simpy делает phpinfo () и прокручивается вниз до «imagick». Проверьте, есть ли он там, а затем проверьте заголовок «поддерживаемые форматы файлов», чтобы узнать, существует ли тип файла, который вы хотите изменить размер.

Если все вышеперечисленное верно и оно по-прежнему не работает, вы не должны забывать включать в свой код путь к imagemagick:

 $config['library_path'] = '/usr/local/bin'; 

Я пережил всю эту боль раньше, поэтому надеюсь, что это поможет вам 🙂

Для множественного изменения размера ниже код работал для меня.

  $config['create_thumb'] = FALSE; //to avoid _thumb prefixing $config['maintain_ratio'] = TRUE; $config['width'] = 250; $config['height'] = 250; $config['new_image'] = 'thumb_250x250_'.$file_name; // new name $CI->load->library('image_lib', $config, 'abc'); //abc to avoid instance caching. $CI->abc->resize(); unset($CI->abc); //unsetting instance. $config['width'] = 100; $config['height'] = 100; $config['new_image'] = 'thumb_100x100_'.$file_name; // new name $CI->load->library('image_lib', $config, 'xyz'); // xyz to avoid instance caching. $CI->xyz->resize(); unset($CI->xyz); // unsetting instance. с  $config['create_thumb'] = FALSE; //to avoid _thumb prefixing $config['maintain_ratio'] = TRUE; $config['width'] = 250; $config['height'] = 250; $config['new_image'] = 'thumb_250x250_'.$file_name; // new name $CI->load->library('image_lib', $config, 'abc'); //abc to avoid instance caching. $CI->abc->resize(); unset($CI->abc); //unsetting instance. $config['width'] = 100; $config['height'] = 100; $config['new_image'] = 'thumb_100x100_'.$file_name; // new name $CI->load->library('image_lib', $config, 'xyz'); // xyz to avoid instance caching. $CI->xyz->resize(); unset($CI->xyz); // unsetting instance. 

Вам нужно использовать $config['new_image'] = '/path/to/new_image.jpg'; в вашей функции resize_photo .

Читайте http://codeigniter.com/user_guide/libraries/image_lib.html

На самом деле вы пытаетесь загрузить библиотеку изображений дважды. Поскольку вы также инициализируете конфигурационный массив на той же самой строке, массив никогда не загружается в библиотеку.

Измените свой код на это:

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

и он будет работать отлично.

Посмотрите, действительно ли вы можете открыть исходное сохраненное изображение, прежде чем пытаться изменить его размер. Я расшифровывал загруженное изображение base64 при использовании preg_replace. По какой-то причине, которую я до сих пор не могу отследить … он как-то удалялся

 $file = preg_replace('/data.*base64,/', '', chunk_split($this->post('myimg')); 

он вернет это: [удалено] / 9 …. и т. д. который при декодировании base64 … очевидно, не является допустимым файлом изображения .. так что изменение размера не будет работать. Мне пришлось добавить

 $file = substr($file,9); 

затем удалите [удалено]. дополнительную работу и взял меня, чтобы понять, но теперь я могу изменить размер изображений.

Боковой вопрос … Почему добавление preg_replace [удалено] ??? Вздох … php.

// Создаем контроллер с именем "image.php"

 class Image extends CI_Controller { public function index($width, $height, $image_path) { $config['image_library'] = 'gd2'; $config['source_image'] = './uploads/'.$image_path; $config['dynamic_output'] = TRUE; $config['maintain_ratio'] = TRUE; $config['width'] = $width; $config['height'] = $height; $this->load->library('image_lib', $config); $this->image_lib->initialize($config); echo $this->image_lib->resize(); } } ?> //Call from view page <img src="<?php echo ("index.php/image/index/150/150/".$luserdata[0]'profile_image']);?>" alt="resized mage1"/>