X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=c1bf643ba5dd2c0a517baac7c16ec38b252dc0ad;hp=b635b30256da6c1174dca62f24e429437262db9e;hb=d1dc26e8f2fd6212d37d2fcd0ff5a2968cac2faf;hpb=c48fe9f8904f3e82b484bba7b62c79a58a9dc5b4 diff --git a/phpfspot.class.php b/phpfspot.class.php index b635b30..c1bf643 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -100,7 +100,7 @@ class PHPFSPOT { public function showPhoto($photo) { - $all_photos = $this->getAllTagPhotos(); + $all_photos = $this->getPhotoSelection(); foreach($all_photos as $all_photo) { @@ -121,7 +121,7 @@ class PHPFSPOT { $details = $this->get_photo_details($photo); $meta = $this->get_meta_informations($this->translate_path($details['directory_path']) ."/". $details['name']); $info = getimagesize($this->translate_path($details['directory_path']) ."/thumbs/". $this->cfg->photo_width ."_". $details['name']); - + $this->tmpl->assign('width', $info[0]); $this->tmpl->assign('height', $info[1]); $this->tmpl->assign('c_date', $meta['DateTime']); @@ -150,7 +150,7 @@ class PHPFSPOT { continue; // return all available (= not selected) tags - print "". $this->tags[$tag] ." "; + print "". $this->tags[$tag] ." "; } @@ -162,7 +162,7 @@ class PHPFSPOT { { // return all selected tags if(isset($_SESSION['selected_tags']) && in_array($tag, $_SESSION['selected_tags'])) { - print "". $this->tags[$tag] ." "; + print "". $this->tags[$tag] ." "; } } @@ -193,10 +193,29 @@ class PHPFSPOT { } // resetTags() - public function getAllTagPhotos() + public function getPhotoSelection() { $tagged_photos = Array(); + /* return a search result */ + if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') { + $result = $this->db->db_query(" + SELECT DISTINCT photo_id + FROM photo_tags pt + INNER JOIN photos p + ON p.id=pt.photo_id + INNER JOIN tags t + ON pt.tag_id=t.id + WHERE t.name LIKE '%". $_SESSION['searchfor'] ."%' + ORDER BY p.time ASC + "); + while($row = $this->db->db_fetch_object($result)) { + array_push($tagged_photos, $row['photo_id']); + } + return $tagged_photos; + } + + /* return according the selected tags */ if(isset($_SESSION['selected_tags'])) { $selected = ""; foreach($_SESSION['selected_tags'] as $tag) @@ -245,30 +264,27 @@ class PHPFSPOT { array_push($tagged_photos, $row['photo_id']); } } - } - else { - $result = $this->db->db_query(" - SELECT DISTINCT photo_id - FROM photo_tags pt - INNER JOIN photos p - ON p.id=pt.photo_id - ORDER BY p.time ASC - "); - while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); - } + return $tagged_photos; } + /* return all available photos */ + $result = $this->db->db_query(" + SELECT DISTINCT photo_id + FROM photo_tags pt + INNER JOIN photos p + ON p.id=pt.photo_id + ORDER BY p.time ASC + "); + while($row = $this->db->db_fetch_object($result)) { + array_push($tagged_photos, $row['photo_id']); + } return $tagged_photos; - } // getAllTagPhotos() + } // getPhotoSelection() public function showPhotoIndex() { - if($_SESSION['searchfor'] == '') - $photos = $this->getAllTagPhotos(); - else - $photos = $this->getSearchResult($_SESSION['searchfor']); + $photos = $this->getPhotoSelection(); $count = count($photos); @@ -293,7 +309,8 @@ class PHPFSPOT { // +1 for for smarty's selection iteration $rows++; - //$images.= "
\n"; + if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') + $this->tmpl->assign('searchfor', $_SESSION['searchfor']); $this->tmpl->assign('count', $count); $this->tmpl->assign('width', $this->cfg->thumb_width); @@ -345,6 +362,54 @@ class PHPFSPOT { if(file_exists(dirname($image) ."/thumbs/". $width ."_". basename($image))) return; + $meta = $this->get_meta_informations($image); + + $rotate = 0; + $flip = false; + + switch($meta['Orientation']) { + + case 1: + $rotate = 0; + $flip = false; + break; + + case 2: + $rotate = 0; + $flip = true; + break; + + case 3: + $rotate = 180; + $flip = false; + break; + + case 4: + $rotate = 180; + $flip = true; + break; + + case 5: + $rotate = 90; + $flip = true; + break; + + case 6: + $rotate = 90; + $flip = false; + break; + + case 7: + $rotate = 270; + $flip = true; + break; + + case 8: + $rotate = 270; + $flip = false; + break; + } + $src_img = @imagecreatefromjpeg($image); if($src_img) @@ -376,6 +441,20 @@ class PHPFSPOT { /* copies resized portion of original image into new image */ imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img)); + /* needs the image to be flipped horizontal? */ + if($flip) { + print "(FLIP)"; + $image = $dst_img; + for($x = 0; $x < $new_w; $x++) { + imagecopy($dst_img, $image, $x, 0, $w - $x - 1, 0, 1, $h); + } + } + + if($rotate) { + print "(ROTATE)"; + $dst_img = $this->rotateImage($dst_img, $rotate); + } + /* write down new generated file */ if(!file_exists(dirname($image) ."/thumbs")) @@ -393,7 +472,6 @@ class PHPFSPOT { public function get_meta_informations($file) { - return exif_read_data($file); } // get_meta_informations() @@ -416,7 +494,7 @@ class PHPFSPOT { { if(!$idx) { /* get all available photos */ - $all = $this->getAllTagPhotos(); + $all = $this->getPhotoSelection(); } else $all = Array($idx); @@ -492,30 +570,77 @@ class PHPFSPOT { { $_SESSION['searchfor'] = $searchfor; - } // showSearchResult() + } // startSearch() - public function getSearchResult($for) + private function rotateImage($img, $degrees) { - $tagged_photos = Array(); + if(function_exists("imagerotate")) + $img = imagerotate($img, $degrees, 0); + else + { + function imagerotate($src_img, $angle) + { + $src_x = imagesx($src_img); + $src_y = imagesy($src_img); + if ($angle == 180) { + $dest_x = $src_x; + $dest_y = $src_y; + } + elseif ($src_x <= $src_y) { + $dest_x = $src_y; + $dest_y = $src_x; + } + elseif ($src_x >= $src_y) { + $dest_x = $src_y; + $dest_y = $src_x; + } + + $rotate=imagecreatetruecolor($dest_x,$dest_y); + imagealphablending($rotate, false); + + switch ($angle) { + + case 90: + for ($y = 0; $y < ($src_y); $y++) { + for ($x = 0; $x < ($src_x); $x++) { + $color = imagecolorat($src_img, $x, $y); + imagesetpixel($rotate, $dest_x - $y - 1, $x, $color); + } + } + break; + + case 270: + for ($y = 0; $y < ($src_y); $y++) { + for ($x = 0; $x < ($src_x); $x++) { + $color = imagecolorat($src_img, $x, $y); + imagesetpixel($rotate, $y, $dest_y - $x - 1, $color); + } + } + break; + + case 180: + for ($y = 0; $y < ($src_y); $y++) { + for ($x = 0; $x < ($src_x); $x++) { + $color = imagecolorat($src_img, $x, $y); + imagesetpixel($rotate, $dest_x - $x - 1, $dest_y - $y - 1, $color); + } + } + break; + + default: $rotate = $src_img; + }; + + return $rotate; - $result = $this->db->db_query(" - SELECT DISTINCT photo_id - FROM photo_tags pt - INNER JOIN photos p - ON p.id=pt.photo_id - INNER JOIN tags t - ON pt.tag_id=t.id - WHERE t.name LIKE '%". $for ."%' - ORDER BY p.time ASC - "); + } + + $img = imagerotate($img, $degrees); - while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); } - return $tagged_photos; + return $img; - } // getSearchResult() + } // rotateImage() }