Перейти к контенту

Preview in Gallery


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

Поставил Inv Gallery 1.3.1 на форум 2.0.4 (XP.SP2, php 4.4, mysql 4.0.17)

Не могу сказать, что было все гладко, но в результате все красиво работает (если кому интересно могу поделиться как все делалось)

 

Но теперь возник вопрос, который сам не могу решить. Превьюшки в галерее масштабируются пропорционально, но не более заданного размера в настройках (т.е. одна 16*80 а другая 90*50). Вобщем то наверно поведение правильное, но хотелось бы, чтобы все превьюшки были одного размера (например 100*100), а иначе выглядит это немного кособоко. Если это нормальное поведение этой галереи, то может кто поделится кодом для исправления масштабирования превью, или ссылочкой на форум где можно задать такой вопрос? Но есть предположение, что это проблемы у меня с GD2, поскольку например watermark images тоже не работает как вобщем то и антилич. Вобщем если кто сталкивался, наставьте на путь истинный :D , а то с пхп я не очень дружу, и вряд ли самостоятельно исправлю это.

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

  • 2 недели спустя...
Хм.. не совсем понятно. В твоем случае тогда будет искажаться геометрия фотографии, если все фотки ресайзить под строго фиксированный размер. Разве нет?
Ссылка на комментарий
Поделиться на других сайтах

пропорциональность естественно соблюсти надо

просто поблема в том, что при разных размерах превьюшек ломано выглядят строки галереи

 

проблему решил самостоятельно, переписав функцию get_proportional_values и _thumbnail_gd

теперь масштабирование происходит правильно (при неодинаковых размерах по X и Y для превью, родной код вытворял чудеса :D ), и превьюшки при создании накладываются на белый прямоугольник (таким образом все превью будут иметь одинаковые размеры, что неэкономно но красиво выглядит)

можно было бы не извращаться так, но задать в хтмл жесткие границы для ячеек мне показалось немного сложнее

 

прошу ногами не пинать, до этого с пхп не имел ничего общего

 

        function thumbnail( $width, $height )
       {
//пусть делаются превью всегда   if( $this->in_file_width > $width || $this->in_file_height > $height )
           {
               $func = "_thumbnail_{$this->img_library}";
//                $sizes = $this->get_proportional_values( $width, $height );
// размеры будут перестроены дальше    return $this->$func( $sizes['newx'], $sizes['newy'] );
               return $this->$func( $width, $height );
           }
//            else
           {
// всегда истина   return false;
           }
       }

        function _thumbnail_gd( $width, $height )
       {
           $sizes  = $this->get_proportional_values( $width, $height );                
           $widthN  = $sizes['newx'];
           $heightN = $sizes['newy'];
    $d_x = ceil ($width-$widthN)/2;
    $d_y = ceil ($height-$heightN)/2;
           $new_img = imagecreatetruecolor( $widthN, $height ); 
    $color_img = imagecolorallocate($new_img, 255, 255, 255);
           imagefill($new_img,0,0,$color_img);
    imagecopyresampled( $new_img, $this->img, 0, $d_y, 0 ,0, $widthN, $heightN, $this->in_file_width, $this->in_file_height ); 
           $this->img = $new_img;
           return true;
       }

        function get_proportional_values( $newx, $newy )
       {
           $R_X = $this->in_file_width / $newx;
           $R_Y = $this->in_file_height / $newy;
    $R = ( $R_X > $R_Y ) ? $R_X : $R_Y;
    $R = ( $R < 1 ) ? 1 : $R;
           $newx  = ceil( $newx / $R * $R_X);            
           $newy  = ceil( $newy / $R * $R_Y);            
           return array( 'newx' => $newx, 'newy' => $newy );
       }

 

 

в оригинале это выглядело так

 

        function thumbnail( $width, $height )
       {
           if( $this->in_file_width > $width || $this->in_file_height > $height )
           {
               $func = "_thumbnail_{$this->img_library}";

               $sizes = $this->get_proportional_values( $width, $height );

               return $this->$func( $sizes['newx'], $sizes['newy'] );
           }
           else
           {
               return false;
           }
       }

       function get_proportional_values( $newx, $newy )
       {
           if( $this->in_file_width > $this->in_file_height )
           {
               $ratio = $this->in_file_width / $this->in_file_height;
               $newy  = ceil( $newx / $ratio );            
           }
           else
           {
               $ratio = $this->in_file_width / $this->in_file_height;
               $newx  = ceil( $ratio * $newy );            
           }

           return array( 'newx' => $newx, 'newy' => $newy );
       }
       function _thumbnail_gd( $width, $height )
       {
           if( ! ( $width && $height ) )
           {
               $sizes  = $this->get_proportional_values( $width, $height );                
               $width  = $sizes['newx'];
               $height = $sizes['newy'];
           }

           $new_img = imagecreatetruecolor( $width, $height ); 
           imagecopyresampled( $new_img, $this->img, 0, 0, 0 ,0, $width, $height, $this->in_file_width, $this->in_file_height ); 

           $this->img = $new_img;

           return true;
       }

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

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

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

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

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

  Допустимо не более 75 смайлов.

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

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

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

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.