Zod_ Опубликовано 25 Июля 2005 Жалоба Поделиться Опубликовано 25 Июля 2005 Поставил 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 тоже не работает как вобщем то и антилич. Вобщем если кто сталкивался, наставьте на путь истинный , а то с пхп я не очень дружу, и вряд ли самостоятельно исправлю это. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
SEngel Опубликовано 3 Августа 2005 Жалоба Поделиться Опубликовано 3 Августа 2005 Хм.. не совсем понятно. В твоем случае тогда будет искажаться геометрия фотографии, если все фотки ресайзить под строго фиксированный размер. Разве нет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Zod_ Опубликовано 6 Августа 2005 Автор Жалоба Поделиться Опубликовано 6 Августа 2005 пропорциональность естественно соблюсти надопросто поблема в том, что при разных размерах превьюшек ломано выглядят строки галереи проблему решил самостоятельно, переписав функцию get_proportional_values и _thumbnail_gdтеперь масштабирование происходит правильно (при неодинаковых размерах по X и Y для превью, родной код вытворял чудеса ), и превьюшки при создании накладываются на белый прямоугольник (таким образом все превью будут иметь одинаковые размеры, что неэкономно но красиво выглядит)можно было бы не извращаться так, но задать в хтмл жесткие границы для ячеек мне показалось немного сложнее прошу ногами не пинать, до этого с пхп не имел ничего общего 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; } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.