Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Прикрутить ресайз фото


Recommended Posts

Делаю уникальный проект. Для определенных задач прикрутил нестандартный загрузчик изображений который сразу грузит в определенную папку.

Сам код загрузчика уже не помню где взял или откуда выдернул...

Стал вопрос прикрутить к нему ресайз как в стандарном файлменеджере с загрузкой разных размеров фото в папку кэша.
На этой мысле понял что не понимаю как это сделать.

Буду благодарен за любые комментарии которые помогут с ресайзом.

Код моего загрузчика под спойлером:

Спойлер

<?php
class ControllerToolImgupload extends Controller {
	public function index() {
		$this->load->language('tool/upload');
    
		$json = array();

		if (!empty($this->request->files['file']['name']) && is_file($this->request->files['file']['tmp_name'])) {
			// Sanitize the filename
			$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8')));

			// Validate the filename length
			if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 64)) {
				$json['error'] = $this->language->get('error_filename');
			}

			// Allowed file extension types
			$allowed = array();

			$extension_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_ext_allowed'));

			$filetypes = explode("\n", $extension_allowed);

			foreach ($filetypes as $filetype) {
				$allowed[] = trim($filetype);
			}

			if (!in_array(strtolower(substr(strrchr($filename, '.'), 1)), $allowed)) {
				$json['error'] = $this->language->get('error_filetype');
			}

			// Allowed file mime types
			$allowed = array();

			$mime_allowed = preg_replace('~\r?\n~', "\n", $this->config->get('config_file_mime_allowed'));

			$filetypes = explode("\n", $mime_allowed);

			foreach ($filetypes as $filetype) {
				$allowed[] = trim($filetype);
			}

			if (!in_array($this->request->files['file']['type'], $allowed)) {
				$json['error'] = $this->language->get('error_filetype');
			}

			// Check to see if any PHP files are trying to be uploaded
			$content = file_get_contents($this->request->files['file']['tmp_name']);

			if (preg_match('/\<\?php/i', $content)) {
				$json['error'] = $this->language->get('error_filetype');
			}

			// Return any upload error
			if ($this->request->files['file']['error'] != UPLOAD_ERR_OK) {
				$json['error'] = $this->language->get('error_upload_' . $this->request->files['file']['error']);
			}
      
			$path_directory = 'image/catalog/product-user/';
	
			if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$this->request->files['file']['name'])) {	
	 	 	
				$filename = $this->request->files['file']['name'];
				$source = $this->request->files['file']['tmp_name'];	
				$target = $path_directory . $filename;
				move_uploaded_file($source, $target);

				if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
					$im = imagecreatefromgif($path_directory.$filename) ;
				}

				if(preg_match('/[.](PNG)|(png)$/', $filename)) {
					$im = imagecreatefrompng($path_directory.$filename) ;
				}	

				if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
			    	$im = imagecreatefromjpeg($path_directory.$filename); 
				}

				$w = 500; 

				$w_src = imagesx($im); 
				$h_src = imagesy($im); 

				$dest = imagecreatetruecolor($w,$w); 

				if ($w_src>$h_src) 
				imagecopyresampled($dest, $im, 0, 0,
				round((max($w_src,$h_src)-min($w_src,$h_src))/2),
				0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 

				if ($w_src < $h_src) 
				imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
				min($w_src,$h_src), min($w_src,$h_src)); 

				if ($w_src==$h_src) 
				imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
		 

				$date=time(); 

				imagejpeg($dest, $path_directory.$date.".jpg");

				$avatar = $path_directory.$date.".jpg";

				$delfull = $path_directory.$filename; 
				unlink ($delfull);

			}

		} else {
			$json['error'] = $this->language->get('error_upload');
		}
    
		if (!$json) { 
			$file = $filename ;

			move_uploaded_file($this->request->files['file']['tmp_name'], $path_directory.$file);

			$json['code'] = $avatar;

			$json['success'] = $this->language->get('text_upload');
		}

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
}

 

 

Надіслати
Поділитися на інших сайтах

8 минут назад, Seofisher сказал:

как в стандарном файлменеджере с загрузкой разных размеров фото в папку кэша.

 

файлменеджер ничего не загружает в папку кеша изображений.

В этом нет смысла, и по-сути, это было бы сильно неправильно с вытекающими отсюда неприятностями.

 

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

 

 

Попробуйте придумать задачу, которую не может решить модуль "Компрессор & etc". Вы меня удивите если сможете это сделать.

 

А вообще лучше описывать суть самой задачи, а не инструменты и способы, с помощью которых вы хотите решить задачу. Непрофессионалы очень часто выбирают совершенно неудобные и/или малопригодные способы, а хорошие решения, напротив, могут просто не видеть (не знать).

 

Так что же такое необычное вы решаете?

Надіслати
Поділитися на інших сайтах

27 минут назад, sitecreator сказал:

 

файлменеджер ничего не загружает в папку кеша изображений.

В этом нет смысла, и по-сути, это было бы сильно неправильно с вытекающими отсюда неприятностями.

 

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

 

 

Попробуйте придумать задачу, которую не может решить модуль "Компрессор & etc". Вы меня удивите если сможете это сделать.

 

А вообще лучше описывать суть самой задачи, а не инструменты и способы, с помощью которых вы хотите решить задачу. Непрофессионалы очень часто выбирают совершенно неудобные и/или малопригодные способы, а хорошие решения, напротив, могут просто не видеть (не знать).

 

Так что же такое необычное вы решаете?


Спасибо, не сомневаюсь что модуль годный. Но мне модуль не нужен, не станет, особый случай с перепиляным опенкартом.
Я хотел подробнее понять как происходит ресайз в опенкарт...

Змінено користувачем Seofisher
Надіслати
Поділитися на інших сайтах

29 минут назад, Seofisher сказал:

не станет, особый случай с перепиляным опенкартом.

 

вы пилили библиотеку image?

зачем?

 

Я вам могу предложить вернуть стандартные файлы и поставить модуль Компрессор.

Все ваши задачи будут решены за счет этого модуля и восстановится совместимость.\

 

Конечно, если для вас первостепенно решения задачи.  Самообучение - это, безусловно, похвально, но это несколько иное.

 

30 минут назад, Seofisher сказал:

Я хотел подробнее понять как происходит ресайз в опенкарт...

 

Все, что только можно придумать (и придумали заказчики до вас ) с ресайзом, уже умеет Компрессор.

Не может быть у вас задачи, которая бы не возникла раньше.

 

32 минуты назад, Seofisher сказал:

Я хотел подробнее понять как происходит ресайз в опенкарт... 

 

И что вам мешает?

Открываете код и изучаете его.

 

А если нужно решить задачу (и в короткие сроки), то я вам предложил вариант.

 

Без ложной скромности скажу, что лучше меня никто не представляет работу с изображениями. Если что-то конкретное, то спрашивайте. Подскажу решение.  На ваше абстрактное "понять как происходит..." не смогу дать ответ, но если будет конкретная задача, то отвечу.  А постигать истину, на мой взгляд, и самосовершенствоваться лучше через анализ кода. Все, что вам нужно содержится в библиотеке image.php

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.