Üdv!
Az Image modult szeretném bővíteni pár képmanipulálási függvénnyel(egyszerű küszöbölés és hasonló). És még ilyet nem csináltam.
Ahogy keresgettem drupal api-ba láttam, hogy pl egy kép skálzása úgy néz ki, hogy van az image.modul-ba egy ilyen hívás:
$status = image_scale($original_path, $destination, $size['width'], $size['height']);
ami az includes/image.inc-be meghívja az image_scale függvényt, ami egy további hívást csinál, attól függően, hogy milyen gd van. Ami mellesleg így történik:
return image_toolkit_invoke('resize', array($source, $destination, $width, $height));
Az világos, hogy az image_toolkit_invoke megfogja hívni az images.gd.inc-ben lévő image_gd_resize függvényt és átadja a megfelelő paramétereket.
Először úgy próbáltam, hogy az előbb említett includeokba beillesztettem a kódjaimat a megfelelő helyekre és úgy nem működött.
1. kérdés: Ez miért lehet?
Ragaszkodnék ehhez a megoldáshoz, mert utána, hogy hogyan kerül a kép a megfelelő helyre arra nem sikerült rá jönnöm. De ha valaki megtudja mondani, akkor lehet csak írnék egy függvényt az Image modulba és azon belül hívnám azt.
2. kérdés: Hogyan tudnám kiegészíteni ezeket az includeokat core hack nélkül?
De lehet az is, hogy valamit a kódban nem úgy csináltam, ahogy kellett volna, ezért beillesztem:
//includes/image.inc
function image_simple_threshold($source, $destination, $threshold_value = 127)
{
return image_toolkit_invoke('simple_threshold', array($source, $destination, $threshold_value));
}
//includes/image.gd.inc
function image_gd_simple_threshold($source, $destination, $threshold_value)
{
if (!file_exists($source))
{
return FALSE;
}
$info = image_get_info($source);
if (!$info)
{
return FALSE;
}
$im = image_gd_open($source, $info['extension']);
if (!$im)
{
return FALSE;
}
$res = imagecreatetruecolor($info['width'],$info['height']);
for ($x=0;$x<$info['width'];$x++)
{
for ($y=0;$y<$info['height'];$y++)
{
$rgb = imagecolorat($im,$x,$y);
$a = ($rgb >> 24) & 0xFF;
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($r > $threshold_value)
{
$temp[0] = 254;
}
else
{
$temp[0] = 0;
}
if($g > $threshold_value)
{
$temp[1] = 254;
}
else
{
$temp[1] = 0;
}
if($b > $threshold_value)
{
$temp[2] = 254;
}
else
{
$temp[2] = 0;
}
$color = imagecolorallocatealpha($res,$temp[0],$temp[1],$temp[2],$a);
imagesetpixel($res,$x,$y,$color);
}
$result = image_gd_close($res, $destination, $info['extension']);
imagedestroy($res);
imagedestroy($im);
return $result;
}
}
Remélem érthetően adtam át az álmatlan északát okozó problémámat.
A válaszokat előre is köszönöm.