use Friendica\App;
use Friendica\Core\Cache;
use Friendica\Core\Config;
+use Friendica\Core\L10n;
use Friendica\Core\System;
-use Friendica\Database\DBM;
+use Friendica\Database\DBA;
+use Friendica\Model\Contact;
use Friendica\Model\Photo;
+use Friendica\Util\Network;
use Exception;
use Imagick;
use ImagickPixel;
-require_once "include/photos.php";
-
/**
* Class to handle images
*/
if (class_exists('Imagick')) {
// Imagick::queryFormats won't help us a lot there...
// At least, not yet, other parts of friendica uses this array
- $t = array(
+ $t = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/gif' => 'gif'
- );
+ ];
} else {
- $t = array();
+ $t = [];
$t['image/jpeg'] ='jpg';
if (imagetypes() & IMG_PNG) {
$t['image/png'] = 'png';
/**
* @brief Maps Mime types to Imagick formats
- * @return arr With with image formats (mime type as key)
+ * @return array With with image formats (mime type as key)
*/
public static function getFormatsMap()
{
- $m = array(
+ $m = [
'image/jpeg' => 'JPG',
'image/png' => 'PNG',
'image/gif' => 'GIF'
- );
+ ];
return $m;
}
* Setup the image to the format it will be saved to
*/
$map = self::getFormatsMap();
- $format = $map[$type];
+ $format = $map[$this->type];
$this->image->setFormat($format);
// Always coalesce, if it is not a multi-frame image it won't hurt anyway
}
}
-
- if ($this->isImagick()) {
- /*
- * If it is not animated, there will be only one iteration here,
- * so don't bother checking
- */
- // Don't forget to go back to the first frame
- $this->image->setFirstIterator();
- do {
- // FIXME - implement horizantal bias for scaling as in followin GD functions
- // to allow very tall images to be constrained only horizontally.
-
- $this->image->scaleDown($dest_width, $dest_height);
- } while ($this->image->nextImage());
-
- // These may not be necessary any more
- $this->width = $this->image->getImageWidth();
- $this->height = $this->image->getImageHeight();
-
- return;
- }
-
-
- $dest = imagecreatetruecolor($dest_width, $dest_height);
- imagealphablending($dest, false);
- imagesavealpha($dest, true);
- 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);
- }
- $this->image = $dest;
- $this->width = imagesx($this->image);
- $this->height = imagesy($this->image);
+ return $this->scale($dest_width, $dest_height);
}
/**
}
}
- if ($this->isImagick()) {
- return $this->scaleDown($dest_width, $dest_height);
- }
-
- $dest = imagecreatetruecolor($dest_width, $dest_height);
- imagealphablending($dest, false);
- imagesavealpha($dest, true);
- 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);
- }
- $this->image = $dest;
- $this->width = imagesx($this->image);
- $this->height = imagesy($this->image);
+ return $this->scale($dest_width, $dest_height);
}
/**
return false;
}
+ return $this->scale($dim, $dim);
+ }
+
+ /**
+ * @brief Scale image to target dimensions
+ *
+ * @param int $dest_width
+ * @param int $dest_height
+ * @return boolean
+ */
+ private function scale($dest_width, $dest_height)
+ {
+ if (!$this->isValid()) {
+ return false;
+ }
+
if ($this->isImagick()) {
+ /*
+ * If it is not animated, there will be only one iteration here,
+ * so don't bother checking
+ */
+ // Don't forget to go back to the first frame
$this->image->setFirstIterator();
do {
- $this->image->scaleDown($dim, $dim);
+ // FIXME - implement horizontal bias for scaling as in following GD functions
+ // to allow very tall images to be constrained only horizontally.
+ $this->image->scaleImage($dest_width, $dest_height);
} while ($this->image->nextImage());
- return;
- }
- $dest = imagecreatetruecolor($dim, $dim);
- imagealphablending($dest, false);
- imagesavealpha($dest, true);
- 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);
+ // These may not be necessary anymore
+ $this->width = $this->image->getImageWidth();
+ $this->height = $this->image->getImageHeight();
+ } else {
+ $dest = imagecreatetruecolor($dest_width, $dest_height);
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+
+ 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, $this->width, $this->height);
+
+ if ($this->image) {
+ imagedestroy($this->image);
+ }
+
+ $this->image = $dest;
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
}
- $this->image = $dest;
- $this->width = imagesx($this->image);
- $this->height = imagesy($this->image);
+
+ return true;
}
/**
$type = null;
if ($fromcurl) {
$a = get_app();
- $headers=array();
+ $headers=[];
$h = explode("\n", $a->get_curl_headers());
foreach ($h as $l) {
- list($k,$v) = array_map("trim", explode(":", trim($l), 2));
- $headers[$k] = $v;
+ $data = array_map("trim", explode(":", trim($l), 2));
+ if (count($data) > 1) {
+ list($k,$v) = $data;
+ $headers[$k] = $v;
+ }
}
if (array_key_exists('Content-Type', $headers))
$type = $headers['Content-Type'];
*/
public static function getInfoFromURL($url)
{
- $data = array();
+ $data = [];
+
+ if (empty($url)) {
+ return $data;
+ }
$data = Cache::get($url);
if (is_null($data) || !$data || !is_array($data)) {
- $img_str = fetch_url($url, true, $redirects, 4);
+ $img_str = Network::fetchUrl($url, true, $redirects, 4);
+
+ if (!$img_str) {
+ return false;
+ }
+
$filesize = strlen($img_str);
- if (function_exists("getimagesizefromstring")) {
- $data = getimagesizefromstring($img_str);
- } else {
- $tempfile = tempnam(get_temppath(), "cache");
+ try {
+ if (function_exists("getimagesizefromstring")) {
+ $data = @getimagesizefromstring($img_str);
+ } else {
+ $tempfile = tempnam(get_temppath(), "cache");
- $a = get_app();
- $stamp1 = microtime(true);
- file_put_contents($tempfile, $img_str);
- $a->save_timestamp($stamp1, "file");
+ $a = get_app();
+ $stamp1 = microtime(true);
+ file_put_contents($tempfile, $img_str);
+ $a->save_timestamp($stamp1, "file");
- $data = getimagesize($tempfile);
- unlink($tempfile);
+ $data = getimagesize($tempfile);
+ unlink($tempfile);
+ }
+ } catch (Exception $e) {
+ return false;
}
if ($data) {
}
}
}
- return array("width" => $dest_width, "height" => $dest_height);
+ return ["width" => $dest_width, "height" => $dest_height];
}
/**
intval($uid)
);
- if (!DBM::is_result($r)) {
+ if (!DBA::isResult($r)) {
logger("Can't detect user data for uid ".$uid, LOGGER_DEBUG);
- return(array());
+ return([]);
}
$page_owner_nick = $r[0]['nickname'];
/// @TODO
/// $default_cid = $r[0]['id'];
- /// $community_page = (($r[0]['page-flags'] == PAGE_COMMUNITY) ? true : false);
+ /// $community_page = (($r[0]['page-flags'] == Contact::PAGE_COMMUNITY) ? true : false);
if ((strlen($imagedata) == 0) && ($url == "")) {
logger("No image data and no url provided", LOGGER_DEBUG);
- return(array());
+ return([]);
} elseif (strlen($imagedata) == 0) {
logger("Uploading picture from ".$url, LOGGER_DEBUG);
if (($maximagesize) && (strlen($imagedata) > $maximagesize)) {
logger("Image exceeds size limit of ".$maximagesize, LOGGER_DEBUG);
- return(array());
+ return([]);
}
$tempfile = tempnam(get_temppath(), "cache");
if (!isset($data["mime"])) {
unlink($tempfile);
logger("File is no picture", LOGGER_DEBUG);
- return(array());
+ return([]);
}
$Image = new Image($imagedata, $data["mime"]);
if (!$Image->isValid()) {
unlink($tempfile);
logger("Picture is no valid picture", LOGGER_DEBUG);
- return(array());
+ return([]);
}
$Image->orient($tempfile);
$width = $Image->getWidth();
$height = $Image->getHeight();
- $hash = photo_new_resource();
+ $hash = Photo::newResource();
$smallest = 0;
$defperm = "";
$visitor = 0;
- $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 0, 0, $defperm);
+ $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 0, 0, $defperm);
if (!$r) {
logger("Picture couldn't be stored", LOGGER_DEBUG);
- return(array());
+ return([]);
}
- $image = array("page" => System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash,
- "full" => System::baseUrl()."/photo/{$hash}-0.".$Image->getExt());
+ $image = ["page" => System::baseUrl().'/photos/'.$page_owner_nick.'/image/'.$hash,
+ "full" => System::baseUrl()."/photo/{$hash}-0.".$Image->getExt()];
if ($width > 800 || $height > 800) {
$image["large"] = System::baseUrl()."/photo/{$hash}-0.".$Image->getExt();
if ($width > 640 || $height > 640) {
$Image->scaleDown(640);
- $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 1, 0, $defperm);
+ $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 1, 0, $defperm);
if ($r) {
$image["medium"] = System::baseUrl()."/photo/{$hash}-1.".$Image->getExt();
}
if ($width > 320 || $height > 320) {
$Image->scaleDown(320);
- $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 2, 0, $defperm);
+ $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 2, 0, $defperm);
if ($r) {
$image["small"] = System::baseUrl()."/photo/{$hash}-2.".$Image->getExt();
}
$min = 160;
$Image->crop(160, $x, $y, $min, $min);
- $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, t('Wall Photos'), 3, 0, $defperm);
+ $r = Photo::store($Image, $uid, $visitor, $hash, $tempfile, L10n::t('Wall Photos'), 3, 0, $defperm);
if ($r) {
$image["thumb"] = System::baseUrl()."/photo/{$hash}-3.".$Image->getExt();
}