Showing posts with label gallery 3. Show all posts
Showing posts with label gallery 3. Show all posts

PHP iptcembed Gallery3 to Flickr

A journey of sharing photo only got me into having a website of my own. When digital camera came out with decent mega pixel was an early adapter of the same. But soon realized sharing Pictures on email was not an option and  hosted pictures  on Tripod. Oh! they used to give 10MB of free hosting :) now Flicker gives one 1TB free. So long  story small after the managing own gallyery app writen initally with csv and php , later mysql and php and lastly Gallery for almost 10 years. found gallery development is kind of not that active it used to be. So thought of moving into Flickr which was big no in-between as they had restriction on free accounts. But now those restriction gone managing 7000+ picture and importing them with proper details remained a BIG challenage. At last came up with iptcembed  where all the details where written into  JPEG file itself and imported those image as set to Flickr.And all your details, tag, captions are set properly.

Here is how I did it

1. Copy Gallery's items table to temp table so we do not mess with live data
2. Add a new column to the temp table
ALTER TABLE `Yours_G3_items-new` ADD `album_name` TEXT NOT NULL
3. Find out the parent album id of each items and add that data in the new column.
UPDATE Yours_G3_items-new,Yours_G3_items  SET Yours_G3_items-new.album_name = Yours_G3_items.title WHERE Yours_G3_items-new.parent_id = Yours_G3_items.id
4. Export the new table with "|" as separator and "" as enclosed.

Now the PHP script
<?
//File to be opened
$file="/tmp/csv.txt";
$gallery_album_base = ..../gallery3/var/albums";
$new_gallery_album_base = <new location>/albums" ;
//
$handle = fopen($file, 'r') or die ("Fail to open input file \n\r") ;
$ln= 0 ;
// Some Functions Start
function csv_explode($delim='|', $str, $enclose='"', $preserve=false){
$resArr = array();
$n = 0;
$expEncArr = explode($enclose, $str);
foreach($expEncArr as $EncItem){
if($n++%2){
array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:''));
}else{
$expDelArr = explode($delim, $EncItem);
array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
$resArr = array_merge($resArr, $expDelArr);
}
}
return $resArr;
}

// iptc_make_tag() function by Thies C. Arntzen
function iptc_make_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if($length < 0x8000)
{
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
}
// Some Functions End
while ($line = fgets ($handle)){
$line = str_ireplace("\x0D", "", $line);
$line = urldecode ($line);
++$ln;
print ("just line : $ln \n");
if ($line===FALSE) print ("FALSE\n");
else {
//print ("I am $ln \n");
//print ($line) ;
$variables = csv_explode ("|", $line);
//print_r ($variables);
//26(album or photo) 25(title), 13(image_path), 4(details),33(album_name/tag)

if ( $variables[26] == photo ){
//Path new and old path
$old_path = $gallery_album_base . '/' . $variables[13];
$image_name_new = $new_gallery_album_base . '/' . $variables[13];
$path_parts = pathinfo ($image_name_new);
if (!file_exists($path_parts['dirname'])) {
print ("makeing directory {$path_parts['dirname']} \n") ;
mkdir ($path_parts['dirname'], 0777,true);
}

// Set the IPTC tags
$iptc = array(
'2#120' => "$variables[4]",
'2#105' => "$variables[25]",
'2#005' => "$variables[25]",
'2#015' => "$variables[33]",
'2#116' => 'Copyright, www santm com'
);
// Convert the IPTC tags into binary code
$data = '';
foreach($iptc as $tag => $string)
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
}
// Embed the IPTC data
$content = iptcembed($data, $old_path);
// Write the new image data out to the file.
$fp = fopen($image_name_new, "wb");
fwrite($fp, $content);
fclose($fp);
print ("working on $image_name_new \n");
//$size = getimagesize($image_name_new, $info);
//if(isset($info['APP13']))
//{
// $iptc = iptcparse($info['APP13']);
// var_dump($iptc);
//}
} //end of if photo loop
} // end of else loop
} // end of while loop
# Close the File.
fclose($handle);
?>
I Wish there was API where I could import the image from my old hosting company to Flickr directly instead of uploading them via their PC up-loader.

More here on major phpfunction

http://www.php.net/function.iptcembed
http://www.php.net/function.pathinfo
http://php.net/manual/fr/function.explode.php

Gallerry 3 sneak peak

Gallery 3 is going to a big change from current gallery 2 and initial alpha release did not have any migration path from gallery2. It was pushed to Beta release after 2 alpha releases. but to my surprise I found it was implemented in alpha 4 and here is the test result of a new neat code. I am really liking the new compact code making gallery 3 faster and lean compared to its predecessor. Similar, to WordPress new theme development is easy no more smarty - thank God I never really mastered those PERL look alike. Now it is simple PHP and CSS. Another core feature is Akismet which does a fantastic job of filtering spam comments. I was able to import 3000+ images in 200+ albums without any problem. There are few things which needs to be ironed before I can put the same in production.