Перейти к содержанию
Официальный форум поддержки Simpla

Умный ресайз изображений


Рекомендуемые сообщения

Отличие, например,  в том, что файл, который выложил kislotnik, имеет нестандартное начало, а именно:

<?php

require_once('Newcms.php');

class Image extends Newcms
{

И у kislotnik-а это работает. Видимо, у него система несколько переделана по сравнению со стандартной. А он этого не замечает и выкладывает файл, который  для стандартной Simpla работать с гарантией не будет...

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • Ответов 64
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Изображения в теме

Для версии 2.3.6 - нет рабочей версии image.php? Файл от кислотника у меня не работает..((

Изменено пользователем aximus
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • 4 недели спустя...

Отлично!!! работает спасибо!!!

Только столкнулся с проблемой, иногда не показывает картинку, пишет: The requested content cannot be loaded. Please try again later.

Ссылка на сообщение
Поделиться на другие сайты

Только столкнулся с проблемой, иногда не показывает картинку, пишет: The requested content cannot be loaded. Please try again later.

 

http://forum.simplacms.ru/topic/8673-что-делать-с-the-requested-content-cannot-be-loaded-please-try-again-later/

Ссылка на сообщение
Поделиться на другие сайты

 

Спасибо, само решение оказалось простым и заняло минуту и не нужно платить 50$

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Спасибо, само решение оказалось простым и заняло минуту и не нужно платить 50$

Может подскажите решение остальным?

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Спасибо, само решение оказалось простым и заняло минуту и не нужно платить 50$

Подскажите решение этой проблемы.

Ссылка на сообщение
Поделиться на другие сайты

Читайте в шапке темы.

 

Если имеете в виду начальный пост темы, то Ваш совет не подойдет.

В первом посте речь о том, чтобы несколько иначе формировать картинки.

А обсуждаемый вопрос совсем о другом - о том, что некоторые  картинки после импорта не показываются при первой загрузке страницы.

Некоторые подробности можно увидеть тут:

http://simpla-tuning.com/tonkaya-oshibka-v-rabote-s-izobrazheniyami-tovarov

 

Спасибо, само решение оказалось простым и заняло минуту и не нужно платить 50$

 

Судя по тому, что n1c не желает выложить решение, которое "заняло минуту", очень сомнительно, что оно у него вообще есть. Скорее всего, создан какой-нибудь костыль, который дает другие недостатки...

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

Мое решение тоже заняло минуту и работает )

Прям пришло в голову и исправлюсь за минуту? Это звучит крайне маловероятно.

Если это так то расскажите нам как Вы это сделали за минуту или о Вас точно так же подумают как и про предыдущего скорострела по решению задачек за минуту.

Ссылка на сообщение
Поделиться на другие сайты

Решение примитивное, но работает, я заметил, что ошибка появляется когда загружаю картинки с разрешением 600 или 800 с любой из сторон, в product.tpl заменил ресайз 800:600 на 801:601, примитивно, но работает и бесплатно ))) 

Изменено пользователем Gandalf
Ссылка на сообщение
Поделиться на другие сайты

А сделать картинку шириной 800 у Вас, значит, нельзя? И это Вы называете решением?

 

Это совсем не решение, это костыль, который почему-то срабатывает именно у Вас из-за особенностей Вашего сайта или хостинга...

 

Подождем отзывов, что скажут другие, поможет ли им такой способ...

Ссылка на сообщение
Поделиться на другие сайты

Если не вмешиваться в сам код image.php, то да, надо уменьшать размер фото, либо загружать большие, либо убрать вод.знак в product.tpl находим resize:800:600:w и убираем :w

Изменено пользователем n1c
Ссылка на сообщение
Поделиться на другие сайты

Если не вмешиваться в сам код image.php, то да, надо уменьшать размер фото, либо загружать большие, либо убрать вод.знак в product.tpl находим resize:800:600:w и убираем :w

 

"надо уменьшать (НЕИЗВЕСТНО ДО КАКИХ ПРЕДЕЛОВ), либо загружать большие (ТОЖЕ НЕИЗВЕСТНО НАСКОЛЬКО БОЛЬШИЕ), либо убрать вод.знак в product.tpl" -  это пережевывание соплей Вы называете решением?

 

Как и предполагалось, у Вас в запасе был костыль, который, в частности, с водяным знаком не работает. Одно чиним - другое ломаем...

Ссылка на сообщение
Поделиться на другие сайты

Пофиг, работает и бесплатно )))   скоро на другую CMS перенесу,

Simpla уже не актуальна с таким функционалом, у меня остался последний сайт на Simpla.

Изменено пользователем Gandalf
Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Писал под 2.3.х

private function image_constrain_imagick($src_file, $dst_file, $max_w, $max_h, $watermark=null, $watermark_offet_x=0, $watermark_offet_y=0, $watermark_opacity=1, $sharpen=0.2)
{
    $thumb = new Imagick();
    
    // Читаем изображение
    if(!$thumb->readImage($src_file))
        return false;
    
    // Размеры исходного изображения
    $src_w = $thumb->getImageWidth();
    $src_h = $thumb->getImageHeight();
    
    // Нужно ли обрезать?
    if (!$watermark && ($src_w <= $max_w) && ($src_h <= $max_h))
    {
        // Нет - просто скопируем файл
        if (!copy($src_file, $dst_file))
            return false;
        return true;
    }    
        
    // Размеры превью при пропорциональном уменьшении
    list($dst_w, $dst_h) = $this->calc_contrain_size($src_w, $src_h, $max_w, $max_h);

    // Уменьшаем
    $thumb->thumbnailImage($dst_w, $dst_h);
   $canvas = new Imagick();
      $canvas->newImage($dst_w, $dst_h, new ImagickPixel("white"));
    
    // Устанавливаем водяной знак
    if($watermark && is_readable($watermark))
    {
        $overlay = new Imagick($watermark);
        //$overlay->setImageOpacity($watermark_opacity);
        //$overlay_compose = $overlay->getImageCompose();
        $overlay->evaluateImage(Imagick::EVALUATE_MULTIPLY, $watermark_opacity, Imagick::CHANNEL_ALPHA);
        
        // Get the size of overlay
        $owidth = $overlay->getImageWidth();
        $oheight = $overlay->getImageHeight();
        
        $watermark_x = min(($max_w-$owidth)*$watermark_offet_x/100, $max_w);
        $watermark_y = min(($max_h-$oheight)*$watermark_offet_y/100, $max_h);
        
    }
    
    
    // Анимированные gif требуют прохода по фреймам
    foreach($thumb as $frame)
    {
        // Уменьшаем
        $frame->thumbnailImage($dst_w, $dst_h);
        
        /* Set the virtual canvas to correct size */
        $frame->setImagePage($dst_w, $dst_h, 0, 0);
        
        // Наводим резкость
        if($sharpen > 0)        
            $thumb->adaptiveSharpenImage($sharpen, $sharpen);
        $canvas->compositeImage($frame, $frame->getImageCompose(), 0,  0);                
        if(isset($overlay) && is_object($overlay))
        {
            // $frame->compositeImage($overlay, $overlay_compose, $watermark_x, $watermark_y, imagick::COLOR_ALPHA);
            $canvas->compositeImage($overlay, imagick::COMPOSITE_OVER, $watermark_x, $watermark_y, imagick::COLOR_ALPHA);
        }
    
    }    
    
    // Убираем комменты и т.п. из картинки
    $canvas->stripImage();
    
    //        $thumb->setImageCompressionQuality(100);
 
    // Записываем картинку
    if(!$canvas->writeImages($dst_file, true))
        return false;
    
    // Уборка
    $thumb->destroy();
    if(isset($overlay) && is_object($overlay))
        $overlay->destroy();
    $canvas->destroy();        
    return true;
}

Imagick без белых полос. В api/Image.php заменить соответствующий кусок кода.

Изменено пользователем Мизантроп
Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

Появился вопрос - каким образом определяется размер (в смысле "вес") картинок, создаваемых ресайзом?

Заморочился вот недавно оптимизацией изображений, чисто вручную фотошопом поменял оптимизировал некоторые картинки - добился чтоб оригинальные картинки весили не больше 100КБ. Думал вес оригинала повлияет на размер ресайзов. Нифига. Ресайз основных картинок как весил 212КБ, так и весит (это при том, что оригинальная картинка меньше 100КБ). Почему так? Как заставить модуль ресайза делать картинки весом поменьше?

 

З.Ы. Папку products чистил.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 месяца спустя...

 

Вот вроде накидал для imagick, пробуйте

	private function image_constrain_imagick($src_file, $dst_file, $max_w, $max_h, $watermark=null, $watermark_offet_x=0, $watermark_offet_y=0, $watermark_opacity=1, $sharpen=0.2)
	{
		$thumb = new Imagick();
		
		// Читаем изображение
		if(!$thumb->readImage($src_file))
			return false;
		
		// Размеры исходного изображения
		$src_w = $thumb->getImageWidth();
		$src_h = $thumb->getImageHeight();
		
		// Нужно ли обрезать?
		if (!$watermark && ($src_w <= $max_w) && ($src_h <= $max_h))
	    { 
			// Нет - просто скопируем файл
			if (!copy($src_file, $dst_file))
				return false;
			return true;
	    }	
			
		// Размеры превью при пропорциональном уменьшении
		list($dst_w, $dst_h) = $this->calc_contrain_size($src_w, $src_h, $max_w, $max_h);
	
		// Уменьшаем
		$thumb->thumbnailImage($dst_w, $dst_h);
	   $canvas = new Imagick();
      $canvas->newImage($max_w, $max_h, new ImagickPixel("white"));
		
		// Устанавливаем водяной знак
		if($watermark && is_readable($watermark))
		{
			$overlay = new Imagick($watermark);
			//$overlay->setImageOpacity($watermark_opacity);
			//$overlay_compose = $overlay->getImageCompose();
			$overlay->evaluateImage(Imagick::EVALUATE_MULTIPLY, $watermark_opacity, Imagick::CHANNEL_ALPHA);
			
			// Get the size of overlay 
			$owidth = $overlay->getImageWidth(); 
			$oheight = $overlay->getImageHeight();
			
			$watermark_x = min(($max_w-$owidth)*$watermark_offet_x/100, $max_w); 
			$watermark_y = min(($max_h-$oheight)*$watermark_offet_y/100, $max_h); 
			
		}
		
		
		// Анимированные gif требуют прохода по фреймам
		foreach($thumb as $frame)
		{
			// Уменьшаем
			$frame->thumbnailImage($dst_w, $dst_h);
			
	    	/* Set the virtual canvas to correct size */
	    	$frame->setImagePage($dst_w, $dst_h, 0, 0);
	    	
			// Наводим резкость
			if($sharpen > 0)		
				$thumb->adaptiveSharpenImage($sharpen, $sharpen);
			$canvas->compositeImage($frame, $frame->getImageCompose(), ($max_w-$dst_w)/2,  ($max_h-$dst_h)/2);				
			if(isset($overlay) && is_object($overlay))
			{
				// $frame->compositeImage($overlay, $overlay_compose, $watermark_x, $watermark_y, imagick::COLOR_ALPHA);
				$canvas->compositeImage($overlay, imagick::COMPOSITE_OVER, $watermark_x, $watermark_y, imagick::COLOR_ALPHA);
			}
		
		}	
		
		// Убираем комменты и т.п. из картинки
		$canvas->stripImage();
		
		//		$thumb->setImageCompressionQuality(100);

		// Записываем картинку
		if(!$canvas->writeImages($dst_file, true))
			return false;
		
		// Уборка
		$thumb->destroy();
		if(isset($overlay) && is_object($overlay))
			$overlay->destroy();
		$canvas->destroy();		
		return true;
	}

 

Не подскажите, пожалуйста, как сюда добавить дополнительное условие:

Если исходная загружаемая картинка размером меньше 800 х 600, то самое большое изображение для нее не дорисовывается белыми пикселями.

Часто бывает что в наличии есть только картинка например 400 х 500. Тогда получается что маленькие превьюшки получаются красиво, а большая картинка 800:600w дорисовывает широкие белые поля и с телефона картинку нормально не рассмотришь, так как фансибокс уменьшает пропорционально экрану.

Ссылка на сообщение
Поделиться на другие сайты

Задам вопрос немного не по этой теме но близко к этому. Когда создаю новый товар картинки там где они нарезаются появляются не сразу, то есть мне нужно зайти на страницу товара, на страницу категории, с телефона и планшета (т.к везде разные размеры нарезаются) и обновить страницу пару раз чтобы картинки нарезались и появились, это баг симплы такой что картинки нарезаются только при обращении к странице в первый раз?

Ссылка на сообщение
Поделиться на другие сайты

Это не баг, это фича))

А то, что несколько раз нужно обновить - это баг хостинга.

Попробуйте отключить imagick в конфиге, на некоторых хостингах это помогает.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Подскажите в чем проблема, если в конфиге включен imagick то ничего не работает, нарезаются как и раньше неправильно, а если выключить imagick, то есть через gd то работает правильно но для новых товаров картинки вообще не нарезает.

пробовал два предложенных варианта для imagick и ничего не меняется

папку products конечно же очищал

Изменено пользователем Julius123
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...