Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   автоизменение размера изображений. (http://forum.typo3.ru/showthread.php?t=1504)

Uznick 11.06.2006 21:09

автоизменение размера изображений.
 
Перевожу сайт на typo3. До этого на нём стояла самописная cms, которая работала с изображениями следующим образом: закачивалась картинка, а потом, при выводе её в браузер, с помощью скрипта размеры автоматически изменялись до заданных в шаблоне средствами GD.

Можно ли средствами typo3 либо сохранить такую же структуру, либо ресайзить изображения при их закачке?

Либо придётся, всё-таки изменять их размер вручную?

Valery Romanchev 11.06.2006 23:32

Цитата:

До этого на нём стояла самописная cms, которая работала с изображениями следующим образом: закачивалась картинка, а потом, при выводе её в браузер, с помощью скрипта размеры автоматически изменялись до заданных в шаблоне средствами GD.
TYPO3 тоже ресайзит картинки при первой загрузке страницы посетителем для всех элементов text with image, image, и внутри RTE, причем сохраняет их в typo3temp, а размеры пишет в базу.

Не понятно в чем проблема

Uznick 12.06.2006 01:40

У меня это реализовано в плагине.

В одно из его полей заливается картинка. Абсолютно в таком же виде в каком она была до заливки она пишется в /uploads/

Далее надо вывести её на экран. И при обращении по пути /uploads/имя_файла выводится она же, неизменённого размера.

Вот проблема в том, как изменить размер в этом случае.

Дополнительного поля, в котором задаются требуемые размеры картинки я не нашёл.

Valery Romanchev 12.06.2006 02:45

что-то я не пойму в чем дело...

есть вагон и маленькая тележка всяких галерей, которые ресайзят изображения - посмотрите как там это сделано (как рендеринг cObject вызывается в PHP)
Если нужно через TS - то можно посмотреть css_styled_content ну и доки конечно.

Uznick 12.06.2006 02:48

доки я смотрел, так ничего путного не нашёл.

а галереи посмотреть почему-то не догадался :)

спасибо, как найду решение -- напишу сюда.

Uznick 12.06.2006 16:56

всё кончилось тем, что написал ещё один скрипт, который уменьшает картинку с помощью Gd и выводит её браузеру.

void 12.06.2006 20:38

хе... вместо того, чтобы чуть почитать доки (TSRef) и/или покопаться в коде)
cObject->IMAGE($conf), где
$conf = array(
"file" = $my_file,
"file." = array(
"maxW" = $my_width,
"maxH" = $my_height
)
);

за код не очень уверен, но что-то похожее.

Uznick 12.06.2006 21:17

К сожалению, я только начинаю разбираться с typo3, поэтому пока не совсем понял что можно сделать через TS и в какую сторону копать в таких ситуациях :(

У меня при вызове $cObject->IMAGE($conf) вылезает Fatal error: Call to a member function on a non-object.

На сколько я понимаю, у меня нет объекта IMAGE. Но как задать его, создавая extension через kickstarter, я не знаю. Да и не только через kickstarter, тоже.

Pavel Antonov 12.06.2006 22:37

в плагин текущий объект типа tslib_cObj передается в переменную cObj.

Вызывать в методах плагина нужно так:
Код:

$this->cObj->IMAGE($conf)

Uznick 13.06.2006 14:49

Наверное я что-то принципиальное не понимаю.

Я создал два экстеншна.

В первом полностью описал таблицы базы.

Во втором уже во фронтенде -- делаю выборку из базы $query=$GLOBALS['TYPO3_DB']->SELECTquery() и так далее.

Из базы я получаю название файла с картинкой.

Далее с этой картинкой произвожу манипуляции по уменьшению.

Я не понимаю, куда можно дописать $this->cObj->IMAGE($conf), т.к. $this->cObj->IMAGE не существует.
У меня нету объекта IMAGE, у меня есть поле из базы с названием картинки.

Нашёл, что-то подобное в экстеншне lz_gallery, но там, как я понял из кода, всё тоже делается вручную через imagemagick.

void 13.06.2006 15:19

Работающий код
PHP код:

foreach ($section_row as $row)
            {
                
$img_conf = array ('file' => 'uploads/tx_sunautomation/'.$row['image'],
                        
'file.' => array (
                            
'maxW' => 100,
                            
'maxH' => 100)
                            );
                
$img $this->cObj->IMAGE($img_conf);            
                
$replace_array = array(
                    
'###RECORD_TITLE###' => $row['title'],
                    
'###RECORD_IMG###' => $img,
                    
'###RECORD_DESCRIPTION###' => $row['description'],
                    
'###RECORD_LINK###' => $this->pi_getPageLink($row['dbmount'])
                    );
                
$block_content.=$this->cObj->substituteMarkerArray($sun_school_block,$replace_array);
            } 

IMAGE - это метод, которая возвращает нужный вам тэг <img> со всеми параметрами.
Причем если картинку нужно как-то изменить, это будет произведено и src будет уже на измененную картинку.

Uznick 13.06.2006 16:23

Спасибо.

Теперь картинка выводится, но неизменённого размера :)

Код:

foreach ($clientlist as $client) {
  $img_conf = array ('file' => 'uploads/tx_portfoliotables/'.$client['image'],
                            'file.' => array (
                            'maxW' => 50,
                            'maxH' => 50
                            )
                            );                           
print $img = $this->cObj->IMAGE($img_conf);           
}

В результате имею <img src="uploads/tx_portfoliotables/image.jpg" width="100" height="100" border="0" alt="" title="" />

void 14.06.2006 01:52

ищите баг... все должно работать) и почему в коде 50, а в хтмл 100?

Uznick 14.06.2006 02:03

Вот в том-то и весь фикус, что непонятно :)

Такое впечатление, что на строчки 'maxW' => 50,'maxH' => 50, движок не обращает внимания, и выдаёт жпеги без преобразований. Потому что исходные картинки как раз 100x100 и есть.

Uznick 16.06.2006 22:23

А при этом случаем не нужно в TSConfig экстеншна описать что image = IMAGE и так далее? Ну или что-нибудь в этом роде?

Я в видеоуроке под названием fepi_05_rendering_the_image подсмотрел. Автор в основном классе описал

Код:

$imgTSConfig = $this->conf['coverImageCObject'];
$imgTSConfig['file'] = 'uploads/tx_usercdcollection/'.$imagetitle;
return $this->cObj->IMAGE($imgTSConfig);

А в файле ext_typoscript_setup.txt описал

Код:

plugin.user_cdcollection_pi1 {

coverImageCObject = IMAGE
coverImageCObject.file.width = 100
}

и у него всё заресайзилось.
правда как создать через кикстартер этот файл я не нашёл..

Видеоурок, кстати, делался для typo3 3.5.0, может с тех времён что-нибудь изменилось.

Dutchak Vitaly 17.06.2006 00:59

Цитата:

Сообщение от Uznick
А при этом случаем не нужно в TSConfig экстеншна описать что image = IMAGE и так далее? Ну или что-нибудь в этом роде?

Я в видеоуроке под названием fepi_05_rendering_the_image подсмотрел. Автор в основном классе описал

Код:

$imgTSConfig = $this->conf['coverImageCObject'];
$imgTSConfig['file'] = 'uploads/tx_usercdcollection/'.$imagetitle;
return $this->cObj->IMAGE($imgTSConfig);

А в файле ext_typoscript_setup.txt описал

Код:

plugin.user_cdcollection_pi1 {

coverImageCObject = IMAGE
coverImageCObject.file.width = 100
}

и у него всё заресайзилось.
правда как создать через кикстартер этот файл я не нашёл..

Видеоурок, кстати, делался для typo3 3.5.0, может с тех времён что-нибудь изменилось.


Этот TS код, который вы привели передается в экстеншн в виде распасенного масива. Выше просто используется уже готовый такой массив, сделанный своими руками.

Uznick 17.06.2006 01:36

понял, спасибо.


тогда я совсем не понимаю, почему у меня не меняется размер картинок :(

Dutchak Vitaly 17.06.2006 03:12

Цитата:

Сообщение от Uznick
понял, спасибо.


тогда я совсем не понимаю, почему у меня не меняется размер картинок :(

проверьте что вам приходит в вашу перменную. при выполнении такого кода:
PHP код:

$img_conf = array ('file' => 'путь к какому-либо изображению',
                             
'file.' => array (
                             
'maxW' => 150,
                             
'maxH' => 350
                             
)
                            );                             
$img $this->cObj->IMAGE($img_conf); 

и напищите код, и что приходит в $img.

Uznick 17.06.2006 05:09

print_r ($img_conf);

Код:

Array
(
    [file] => fileadmin/templates/images/a_018.jpg
    [file.] => Array
        (
            [maxW] => 150
            [maxH] => 350
        )

)

print $img
Код:

<img src="fileadmin/templates/images/a_018.jpg" width="100" height="100" border="0" alt="" title="" />

Pavel Antonov 18.06.2006 14:49

Цитата:

Сообщение от Uznick
print_r ($img_conf);

Код:

Array
(
    [file] => fileadmin/templates/images/a_018.jpg
    [file.] => Array
        (
            [maxW] => 150
            [maxH] => 350
        )

)

print $img
Код:

<img src="fileadmin/templates/images/a_018.jpg" width="100" height="100" border="0" alt="" title="" />

Сдается мне.. что размер оригинальной картинки и есть 100х100...

Uznick 18.06.2006 22:26

именно.

но вышеприведённый код её размер изменить должен, по идее.

Valery Romanchev 18.06.2006 23:37

Цитата:

но вышеприведённый код её размер изменить должен, по идее.
помоему был параметр, который говорит тайпе, чтобы не увеличивала картинки, больше, чем они есть
посмотрите в Install tool

Uznick 19.06.2006 00:51

Если картинке 100х100 ей передавать

'maxW' => 20,
'maxH' => 20

то тоже ноль реакции.

Может для этого какой-нибудь imagemagick обязательно нужен, а GD недостаточно? Я уже не знаю на что думать.

Я тут зашёл в install tool и проверил scaling images.
Ответ был таков:

Test skipped
Use of ImageMagick has been disabled in the configuration. Refer to section 'Basic Configuration' to change or review you configuration settings


Часовой пояс GMT +4, время: 16:01.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot