Porting Funzioni php - Per Scalare immagini agendo sull'HTML presente nel $Content

14 contenuti / 0 new
Ultimo contenuto
Porting Funzioni php - Per Scalare immagini agendo sull'HTML presente nel $Content

C'è un modo, all'interno di un tema per processare le immagini, im modo tale da fare scalarle in maniera proporzionata, sovrascrivendo le impostazioni definite in style?

<img style="width: 200px; height: 100px" src="...">

Quello che a me interessa è che il tema faccia in modo di scalare l'immagine in maniera proporzionata impostando un width: 100%;
Purtroppo non riesco a scalare in maniera proporzionale, usando i css xkè style non mi pare sovrascrivibile.

C'è forse qualche phptemplate_prepocess che può aiutarmi?

---------------

Allego i File del Modulo Mobile Plugin. All'interno di sono delle funzioni che riescono a manipolare width e height delle immagini.

Cortesemente potete aiutarmi a fare il porting delle funzioni necessarie in modo che funzionino inserendole in template.php del tema mobile? Io da solo non sono in grado di farlo.
Interessante anche la soluzione per youtube.

Userei volentieri il modulo Mobile Plugin... se solo non si incartasse con altri moduli.

Qualcuno mi può aiutare a fare il porting di queste funzioni del Modulo Mobile Plugin, fino a renderle funzioni prensenti in template.php funzionati con phptemplate ?

/**
* Optimizes html content for mobile view.
* @param map an associative array of html markup to optimize
*/
function _mobileplugin_optimize(&$map) {
require_once(dirname(__FILE__) . '/simple_html_dom.php');
// Prepare group configuration.
$group_setup = mobileplugin_get_group_setup();
$imgact = _mobileplugin_get_setup_val($group_setup, 'imageact', 'scale');
$width = $height = 180;
if ($imgact == 'scale') {
list($w, $h) = explode('x', _mobileplugin_get_setup_val($group_setup, 'imagesize', ''));
$w = intval(trim($w));
$h = intval(trim($h));
if ($w > 0 && $h > 0) {
$width = $w;
$height = $h;
}
}
$bw = intval(_mobileplugin_get_setup_val($group_setup, 'breakwords', 30));
// Optimize given key values.
$values = array();
foreach ($map as $key => $value) {
if (!empty($value)) {
$dom = str_get_html($value);
module_invoke_all('mobileplugin_optimize_dom', $group_setup, $dom);
// Do image processing.
$dom = str_get_html($dom->save());
switch ($imgact) {
case 'scale':
foreach ($dom->find('img') as $i) {
$res = _mobileplugin_image_scaled($i->src, $width, $height);
if (is_array($res)) {
$i->width = $res[0];
$i->height = $res[1] > 0 ? $res[1] : null;
} else {
$i->src = base_path() . $res;
$i->width = null;
$i->height = null;
}
}
break;
case 'remove':
foreach ($dom->find('img') as $i) {
$i = null;
}
break;
default:
break;
}
// Break long words.
if ($bw > 0) {
foreach ($dom->find('text') as $t) {
if ($t->parent()->tag != 'script') {
$t->outertext = _mobileplugin_break_long_words($t->outertext, $bw);
}
}
}
$map[$key] = $dom->save();
}
}
}
/**
* Gets a setting or a default value. Usable helper for modules implementing mobileplugin hooks.
* @param group a group settings array
* @param key a stored key
* @param default a default value
* @return a stored value or default
*/
function _mobileplugin_get_setup_val(&$group, $key, $default) {
if (isset($group[$key])) {
return $group[$key];
}
return $default;
}
/**
* Scales an image down if possible.
* @param url an image url
* @param width a maximum width
* @param height a maximum height
* @return new image url or size array
*/
function _mobileplugin_image_scaled($url, $width, $height) {
$copydir = file_directory_path() . '/mobileplugin';
$sizedir = $copydir . '/' . $width . 'x' . $height;
$basename = md5($url) . substr($url, strrpos($url, '.'));
$targetname = $sizedir . '/' . $basename;
if (file_exists($targetname)) {
return $targetname;
}
// Get the image through http to be sure.
$urlinfo = parse_url($url);
if (!$urlinfo['host'] || $urlinfo['host'] == $_SERVER['SERVER_NAME']) {
$bpath = base_path();
$bpathl = strlen($bpath);
if (substr($urlinfo['path'], 0, $bpathl) == $bpath) {
$file = urldecode(substr($urlinfo['path'], $bpathl));
// Try to activate imagecache.
if (!file_exists($file)) {
drupal_http_request($urlinfo['path'], array(), 'GET', null, 1);
if (!file_exists($file)) {
return array($width, 0);
}
}
// Scale using imageapi if available.
file_check_directory($copydir, true);
file_check_directory($sizedir, true);
drupal_get_messages();
if (module_exists('imageapi') && imageapi_default_toolkit()) {
$image = imageapi_image_open($file);
if ($image->info['width'] > 0) {
if (imageapi_image_scale($image, $width, $height) && imageapi_image_close($image, $targetname)) {
return $targetname;
}
}
}
if (image_scale($file, $targetname, $width, $height)) {
return $targetname;
}
}
}
return array($width, 0);
}

Cerco un modo per scalare le immagini agendo su width e height per il tema mobile.... ed il Modulo Mobile Plugin lo fa ma non posso utilizzarlo xkè ha i suoi bug e rotture varie.

imagecache?

Passione per Drupal
http://retialternative.it

enrik4drupal wrote:
imagecache?

No!.. xkè le immagini non sono necessariamente dei file depositati sul server, anzi quelle sul server sono meno dell'1%. Serve uno strumento che lavori sull'url.

In tal caso, non è + semplice modificare width e height...con una funzione per la scalabilità? Imagecache non va bene, in questo caso.

Considerate anche che il sito è uno... cambiano solo i temi.

In più l'immagine sono normalmente parte del content e non sono gestite da alcun campo cck, questo proprio xkè non è richisto l'upload del file ma si richiede di poter lavorare con una url dell'immagine stessa che puà trovarsi ovunque nel web.

krima wrote:
Qui c'è una soluzione via css http://css.html.it/articoli/leggi/2430/immagini-liquide-ed-elastiche/[/q...

Ciao,
purtroppo la soluzione che hai postato non è quella applicabile sebbene sia la più intuitiva. E' stata la prima cosa che ho fatto.

La questione è che editor come CKeditor inseriscono in img parametri css tramite style, oppure che nodi creati tramite feeds che presentano all'interno del tag img la definizione di stile tramite style.

Quando determinati parametri css sono definiti tramite style, questi non possono essere sovrascritti tramite class o id (almeno dal punto di vista pratico). Questo succede perchè l'element.style sovrascrive ogni eredità definita tramite class o id.

Una minima "toppa" si ha utilizzando il rag max-width o max-height per l'immagine, ma purtroppo essendo impostati via style sia width che height, la scalabilità tramite max-weight o max-height non avviene, nel senso che viene modificata una sola dimensione e non entrambe, nemmeno se imposti height: auto o max-height: auto;

Di conseguenza dal mio punto di vista, almeno che qualcuno non mi sottoponga qualche soluzione, la via per procedere è quela del preprocessing theme di drupal.

Ho inserito in questa discussione la SOLUZIONE effettiva, presa dal modulo Mobile Plugin... ho bisogno di aiuto per porterla riutilizzare.

Qualcuno mi può aiutare?

Mi dovrò arrangiare da solo? :(
Sarà impresa durissima.
Mi duole il cuore non trovare aiuto per questa cosa!

Non c'è nessun suggerimento... per poter iniziare a procedere?!.... io non sono nemmeno da dove cominciare!

Ragazzi, qualcuno ha voglia di darmi una mano nel creare delle apposite funzioni che agiscano sulla scalabilità delle immagini e sui video di youtube partendo dalle funzioni che sono presenti nei file allegati a questa discussione?

Devo riprendere in mano questo lavoro... se no non vado avanti e mi serve proprio un pò d'aiuto.

hai provato....

http://drupal.org/project/immage

e poi

http://drupalorg/project/lightbox2

?????

prova, me le hanno consigliate... ah... se haio qualche esperienza nella creazione dei mtemplate per drupal... mi farebbe comodo....

Non ci sto capendo nulla!

NON LO SO FARE!!... Cavolo!

Eppure, da un punto di vista di logica degli algoritmi utilizzati guardando le funzioni che mi interessano.. sembra tutto molto chiaro.

Le funzioni principali del file mobileplugin.module.txt che mi interessano sono queste:

/**
* Optimizes html content for mobile view.
* @param map an associative array of html markup to optimize
*/
function _mobileplugin_optimize(&$map) {

e poi

/**
* Scales an image down if possible.
* @param url an image url
* @param width a maximum width
* @param height a maximum height
* @return new image url or size array
*/
function _mobileplugin_image_scaled($url, $width, $height) {

Mi rendo conto di una cosa... mi manca il Know How legato al meccanisco di Drupal che richiama le funzioni definite all'interno di un modulo. Dico questo xkè le funzioni in esame non fanno direttamente il parsing del content... ma vengono eseguite senza che queste si occupino del parsing. Quindi c'è un'altro modo che NON so.

Molto interessante in queste funzioni l'utilizzo dei parametri del DOM per rintracciare e agire sull'html presente nel content :-).

Per favore, qualcuno mi aiuti!

dragossido wrote:
hai provato....

http://drupal.org/project/immage

e poi

http://drupalorg/project/lightbox2

?????

prova, me le hanno consigliate... ah... se haio qualche esperienza nella creazione dei mtemplate per drupal... mi farebbe comodo....

Non ci sto capendo nulla!

Ehm!... non ho capito nulla di quello che mi stai chiedendo. il primo url non esiste... il secondo non è quello che serve.
Non ho idea di cosa sia un mtemplate. Se intendi i temi per il mobile, io questi li realizzo come un qualsiasi altro tema.

... grazie per la considerazione! :):):):)

guarda questo

http://drupal.org/search/apachesolr_search/image

Mi spiace, ma quella che proponi è una via già battuta :-) ...e trovata insoddisfacente!!
L'unica via al momento valida è proprio quella adottata dal modulo mobile_plugin.

A me servirebbe giusto un modo per fare il parsing del nodo ed applicare alcuni accorgimenti delle funzioni del modulo mobile_plugin sia per immagini che per i video di youtube.

Per favore, aiutatemi!

Ho la soluzione ad un problema importante tra le dite delle mie mani e non sono in grado di utilizzarla!...