Я работаю над скриптом, который загружает файл из 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 так же, как и вы. Для этого вам понадобится следующее:
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"/>