diff --git a/database.sql b/database.sql index c1d1b27e4e..53dc0c5b21 100644 --- a/database.sql +++ b/database.sql @@ -745,6 +745,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( `desc` text NOT NULL, `album` char(255) NOT NULL, `filename` char(255) NOT NULL, + `type` CHAR(128) NOT NULL DEFAULT 'image/jpeg', `height` smallint(6) NOT NULL, `width` smallint(6) NOT NULL, `data` mediumblob NOT NULL, diff --git a/include/Photo.php b/include/Photo.php index ffefc37eca..f769a70a6e 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -105,9 +105,9 @@ class Photo { $dest = imagecreatetruecolor( $dest_width, $dest_height ); - imagealphablending($dest->image, false); + imagealphablending($dest, false); imagesavealpha($dest, true); - if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127));; // fill with alpha + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); if($this->image) imagedestroy($this->image); @@ -164,9 +164,9 @@ class Photo { $dest = imagecreatetruecolor( $dest_width, $dest_height ); - imagealphablending($dest->image, false); + imagealphablending($dest, false); imagesavealpha($dest, true); - if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127));; // fill with alpha + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); if($this->image) imagedestroy($this->image); @@ -181,9 +181,9 @@ class Photo { public function scaleImageSquare($dim) { $dest = imagecreatetruecolor( $dim, $dim ); - imagealphablending($dest->image, false); + imagealphablending($dest, false); imagesavealpha($dest, true); - if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127));; // fill with alpha + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height); if($this->image) imagedestroy($this->image); @@ -195,9 +195,9 @@ class Photo { public function cropImage($max,$x,$y,$w,$h) { $dest = imagecreatetruecolor( $max, $max ); - imagealphablending($dest->image, false); + imagealphablending($dest, false); imagesavealpha($dest, true); - if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127));; // fill with alpha + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h); if($this->image) imagedestroy($this->image); @@ -295,6 +295,7 @@ class Photo { * @arg $fromcurl boolean Check Content-Type header from curl request */ function guess_image_type($filename, $fromcurl=false) { + logger('Photo: guess_image_type: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG); $type = null; if ($fromcurl) { $a = get_app(); @@ -310,12 +311,13 @@ function guess_image_type($filename, $fromcurl=false) { if (is_null($type)){ $ext = pathinfo($filename, PATHINFO_EXTENSION); $types = Photo::supportedTypes(); - foreach ($types as $m=>$e){ - if ($ext==$e) return $m; - } $type = "image/jpeg"; - } + foreach ($types as $m=>$e){ + if ($ext==$e) $type = $m; + } + } + logger('Photo: guess_image_type: type='.$type, LOGGER_DEBUG); return $type; } diff --git a/mod/fbrowser.php b/mod/fbrowser.php index 66ff9252eb..3f034226e1 100644 --- a/mod/fbrowser.php +++ b/mod/fbrowser.php @@ -4,7 +4,9 @@ * @subpackage FileBrowser * @author Fabio Comuni */ - + +require_once('include/Photo.php'); + /** * @param App $a */ @@ -43,14 +45,22 @@ function fbrowser_content($a){ $path[]=array($a->get_baseurl()."/fbrowser/image/".$a->argv[2]."/", $album); } - $r = q("SELECT `resource-id`, `id`, `filename`, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc` + $r = q("SELECT `resource-id`, `id`, `filename`, type, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc` FROM `photo` WHERE `uid` = %d $sql_extra GROUP BY `resource-id` $sql_extra2", intval(local_user()) ); - - function files1($rr){ global $a; return array( $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['hiq'] . '.jpg', template_escape($rr['filename']), $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.jpg'); } + function files1($rr){ + global $a; + $types = Photo::supportedTypes(); + $ext = $types[$rr['type']]; + return array( + $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['hiq'] . '.' .$ext, + template_escape($rr['filename']), + $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext + ); + } $files = array_map("files1", $r); $tpl = get_markup_template("filebrowser.tpl"); diff --git a/mod/photos.php b/mod/photos.php index 0723535871..efeab8fa3c 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -682,9 +682,9 @@ function photos_post(&$a) { $filesize = intval($_FILES['userfile']['size']); $type = $_FILES['userfile']['type']; } - + if ($type=="") $type=guess_image_type($filename); - logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' '. $type . ' ' . $filesize . ' bytes', LOGGER_DEBUG); + logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); $maximagesize = get_config('system','maximagesize'); diff --git a/mod/profile_photo.php b/mod/profile_photo.php index 2817f39423..e44707f9bb 100644 --- a/mod/profile_photo.php +++ b/mod/profile_photo.php @@ -109,7 +109,8 @@ function profile_photo_post(&$a) { $filename = basename($_FILES['userfile']['name']); $filesize = intval($_FILES['userfile']['size']); $filetype = $_FILES['userfile']['type']; - + if ($filetype=="") $filetype=guess_image_type($filename); + $maximagesize = get_config('system','maximagesize'); if(($maximagesize) && ($filesize > $maximagesize)) { diff --git a/mod/wall_upload.php b/mod/wall_upload.php index 20666e0ef4..4b81f8d1c2 100644 --- a/mod/wall_upload.php +++ b/mod/wall_upload.php @@ -69,7 +69,8 @@ function wall_upload_post(&$a) { $filesize = intval($_FILES['media']['size']); $filetype = $_FILES['media']['type']; } - + + if ($filetype=="") $filetype=guess_image_type($filename); $maximagesize = get_config('system','maximagesize'); if(($maximagesize) && ($filesize > $maximagesize)) {