Ik maak gebruik van image 404 caching.
Hiervoor maak ik gebruik van een php script.
Dit script werkt alsvolgt:
ik laadt vanuit een datafeed een afbeelding in.
Deze afbeelding is bijv. 1024 x 680px
het script haalt de afbeelding op, plaatst deze in een subdirectory met een id van het feed.
resized de afbeelding naar een formaat die ik wil gebruiken op mijn website (250x250px) met behoud van proportie.
vervolgens maakt hij de afbeelding 250x166px
Wat ik graag wil is dat hij de afbeelding maakt naar 250x250px en het restant vult met wit.
Dit wil ik namelijk toepassen om een vast formaat in mijn script in te stellen wat weer goed werkt voor Google.
Wie kan mij helpen mijn huidige script aan te passen:
mysql_select_db( $db_database, $_resource );
# adjust if you use
#your definition in xhelpers.php should look like:
#define ('DF_IMAGE','concat("http://img.example.com/cache/",`feed_id`,"/",`items_id`,".jpg")');
if ( preg_match("#.*imgcache/([0-9]+)/([0-9]+).jpg#",$_SERVER['REQUEST_URI'],$m) ) {
$dir='img/'.$m[1];
if ( ! is_dir($dir) ) { mkdir ($dir,0755,true); }
$img=$dir.'/'.$m[2].'.jpg';
$id=(int)$m[2];
$feed_q="select image from $db_table where items_id = $id limit 1";
$_feeds=mysql_query($feed_q,$_resource);
$p=mysql_result($_feeds,0);
if ( $p ) {
createthumb($p,"$img",216,216);
exit;
}
}
function createthumb($name,$filename,$new_w,$new_h)
{
$src_img=false;
$name=str_replace(array('[',']',' ','&'),array('%5B','%5D','%20','&'),$name);
$src_img=imagecreatefromstring(file_get_contents($name));
if ( ! $src_img ) {
if (preg_match("/(jpg|jpeg)$/i",$name)){
$src_img=imagecreatefromjpeg($name);
}
if (preg_match("/gif$/i",$name)){
$src_img=imagecreatefromgif($name);
}
if (preg_match("/png$/i",$name)){
$src_img=imagecreatefrompng($name);
}
}
if ( ! $src_img ) {
return;
#or use local image as base
}
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
if ($old_x > $old_y)
{
$thumb_w=$new_w;
$thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y)
{
$thumb_w=$old_x*($new_w/$old_y);
$thumb_h=$new_h;
}
if ($old_x == $old_y)
{
$thumb_w=$new_w;
$thumb_h=$new_h;
}
$d_h=$thumb_h > 216?216:$thumb_h;
$dst_img=ImageCreateTrueColor($thumb_w,$d_h);
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
imagejpeg($dst_img,$filename);
header("Content-type: image/jpg");
imagejpeg($dst_img);
imagedestroy($dst_img);
imagedestroy($src_img);
}
Qua principe lijkt het wat op een watermerk.
Dus de basis-image is een wit vlak; het watermerk is de image die jouw code aanmaakt: $dst_img
Je moet dan nog berekenen op welke pixel de hoek van de image moet komen
(canvas_width - image_width) / 2
of zo.
Helaas heb ik zelf weinig kennis van PHP (ben een designer, en frontend ontwerper)
Wellicht dat iemand hier wat aan heeft?
Dit moet hetzelfde doen:
function resize($imagePath,$opts=null){
$imagePath = urldecode($imagePath);
# start configuration
$cacheFolder = './cache/'; # path to your cache folder, must be writeable by web server
$remoteFolder = $cacheFolder.'remote/'; # path to the folder you wish to download remote images into
<?php
// error_reporting(E_ALL);
require_once 'class.upload.php'; // Te downloaden op: http://www.verot.net/php_class_upload_download.htm
$handle = new upload('mijn_foto.jpg'); // bij het uploaden kan je als parameter bv $_FILES['image_field'] invullen
if ($handle->uploaded) {
$handle->image_resize = true;
$handle->image_y = 250;
$handle->image_x = 250;
$handle->image_ratio_fill = true; // dit doet: de foto wordt zo goed mogelijk verkleind (best fit); de overtollige ruimte wordt gevuld met een kleur;
$handle->image_background_color = '#FFFFFF';
$handle->process('files/'); // parameter: de submap waar je de foto opslaat
if ($handle->processed) {
echo 'image resized';
// $handle->clean(); // Indien je dit laat uitvoeren, wordt het originele
} else {
echo 'error : ' . $handle->error;
}
}
?>
Dus, als je niets aanpast, heb je nodig:
'mijn_foto.jpg' (zelfde map als index.php)
submap 'files' waarin de aangepaste foto komt.
Als je content bent met dit resultaat, kunnen we zien om dit in te bouwen bij jouw code.
Bedankt voor het mee denken...
Het maakt mij eerlijk gezegt niet veel uit.
Het gaat erom dat ik een externe afbeelding uit een feed binnenhaal.
Deze afbeelding converteerd hij momenteel binnen de aangegeven marge van 250x250...
Alleen maakt hij de afbeelding in proportie ipv dat hij de overige pixels converteert naar witte pixels zodat elke afbeelding altijd 250x250 is.
De manier waarop maakt mij niet veel uit...
Maar het princiepe van bonvenstaande script is juist. :)