Просмотр полной версии : автоизменение размера изображений.
Перевожу сайт на typo3. До этого на нём стояла самописная cms, которая работала с изображениями следующим образом: закачивалась картинка, а потом, при выводе её в браузер, с помощью скрипта размеры автоматически изменялись до заданных в шаблоне средствами GD.
Можно ли средствами typo3 либо сохранить такую же структуру, либо ресайзить изображения при их закачке?
Либо придётся, всё-таки изменять их размер вручную?
Valery Romanchev
11.06.2006, 23:32
До этого на нём стояла самописная cms, которая работала с изображениями следующим образом: закачивалась картинка, а потом, при выводе её в браузер, с помощью скрипта размеры автоматически изменялись до заданных в шаблоне средствами GD.
TYPO3 тоже ресайзит картинки при первой загрузке страницы посетителем для всех элементов text with image, image, и внутри RTE, причем сохраняет их в typo3temp, а размеры пишет в базу.
Не понятно в чем проблема
У меня это реализовано в плагине.
В одно из его полей заливается картинка. Абсолютно в таком же виде в каком она была до заливки она пишется в /uploads/
Далее надо вывести её на экран. И при обращении по пути /uploads/имя_файла выводится она же, неизменённого размера.
Вот проблема в том, как изменить размер в этом случае.
Дополнительного поля, в котором задаются требуемые размеры картинки я не нашёл.
Valery Romanchev
12.06.2006, 02:45
что-то я не пойму в чем дело...
есть вагон и маленькая тележка всяких галерей, которые ресайзят изображения - посмотрите как там это сделано (как рендеринг cObject вызывается в PHP)
Если нужно через TS - то можно посмотреть css_styled_content ну и доки конечно.
доки я смотрел, так ничего путного не нашёл.
а галереи посмотреть почему-то не догадался :)
спасибо, как найду решение -- напишу сюда.
всё кончилось тем, что написал ещё один скрипт, который уменьшает картинку с помощью Gd и выводит её браузеру.
хе... вместо того, чтобы чуть почитать доки (TSRef) и/или покопаться в коде)
cObject->IMAGE($conf), где
$conf = array(
"file" = $my_file,
"file." = array(
"maxW" = $my_width,
"maxH" = $my_height
)
);
за код не очень уверен, но что-то похожее.
К сожалению, я только начинаю разбираться с 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)
Наверное я что-то принципиальное не понимаю.
Я создал два экстеншна.
В первом полностью описал таблицы базы.
Во втором уже во фронтенде -- делаю выборку из базы $query=$GLOBALS['TYPO3_DB']->SELECTquery() и так далее.
Из базы я получаю название файла с картинкой.
Далее с этой картинкой произвожу манипуляции по уменьшению.
Я не понимаю, куда можно дописать $this->cObj->IMAGE($conf), т.к. $this->cObj->IMAGE не существует.
У меня нету объекта IMAGE, у меня есть поле из базы с названием картинки.
Нашёл, что-то подобное в экстеншне lz_gallery, но там, как я понял из кода, всё тоже делается вручную через imagemagick.
Работающий код
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_a rray);
}
IMAGE - это метод, которая возвращает нужный вам тэг <img> со всеми параметрами.
Причем если картинку нужно как-то изменить, это будет произведено и src будет уже на измененную картинку.
Спасибо.
Теперь картинка выводится, но неизменённого размера :)
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="" />
ищите баг... все должно работать) и почему в коде 50, а в хтмл 100?
Вот в том-то и весь фикус, что непонятно :)
Такое впечатление, что на строчки 'maxW' => 50,'maxH' => 50, движок не обращает внимания, и выдаёт жпеги без преобразований. Потому что исходные картинки как раз 100x100 и есть.
А при этом случаем не нужно в 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
А при этом случаем не нужно в 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 код, который вы привели передается в экстеншн в виде распасенного масива. Выше просто используется уже готовый такой массив, сделанный своими руками.
понял, спасибо.
тогда я совсем не понимаю, почему у меня не меняется размер картинок :(
Dutchak Vitaly
17.06.2006, 03:12
понял, спасибо.
тогда я совсем не понимаю, почему у меня не меняется размер картинок :(
проверьте что вам приходит в вашу перменную. при выполнении такого кода:
$img_conf = array ('file' => 'путь к какому-либо изображению',
'file.' => array (
'maxW' => 150,
'maxH' => 350
)
);
$img = $this->cObj->IMAGE($img_conf);
и напищите код, и что приходит в $img.
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
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...
именно.
но вышеприведённый код её размер изменить должен, по идее.
Valery Romanchev
18.06.2006, 23:37
но вышеприведённый код её размер изменить должен, по идее.
помоему был параметр, который говорит тайпе, чтобы не увеличивала картинки, больше, чем они есть
посмотрите в Install tool
Если картинке 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
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot