<?php
/**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
namespace Friendica\Util;
use Friendica\Core\Logger;
-use Friendica\Core\System;
use Friendica\DI;
+use Friendica\Model\Photo;
/**
* Image utilities
/**
* Fetch image mimetype from the image data or guessing from the file name
*
- * @param string $image_data Image data
- * @param string $filename File name (for guessing the type via the extension)
- * @param string[] $mimeTypes possible mime types
+ * @param string $image_data Image data
+ * @param string $filename File name (for guessing the type via the extension)
+ * @param string $mime default mime type
*
* @return string
* @throws \Exception
*/
- public static function getMimeTypeByData(string $image_data, string $filename = '', array $mimeTypes = [])
+ public static function getMimeTypeByData(string $image_data, string $filename = '', string $mime = '')
{
- foreach ($mimeTypes as $mimeType) {
- if (substr($mimeType, 0, 6) == 'image/') {
- Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mimeTypes]);
- return $mimeType;
- }
+ if (substr($mime, 0, 6) == 'image/') {
+ Logger::info('Using default mime type', ['filename' => $filename, 'mime' => $mime]);
+ return $mime;
}
$image = @getimagesizefromstring($image_data);
if (!empty($image['mime'])) {
- Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $mimeTypes, 'mime' => $image['mime']]);
+ Logger::info('Mime type detected via data', ['filename' => $filename, 'default' => $mime, 'mime' => $image['mime']]);
return $image['mime'];
}
return $data;
}
- $img_str = DI::httpRequest()->fetch($url, true, 4);
+ if (Network::isLocalLink($url) && ($data = Photo::getResourceData($url))) {
+ $photo = Photo::selectFirst([], ['resource-id' => $data['guid'], 'scale' => $data['scale']]);
+ if (!empty($photo)) {
+ $img_str = Photo::getImageDataForPhoto($photo);
+ }
+ // @todo Possibly add a check for locally stored files
+ }
+
+ if (empty($img_str)) {
+ $img_str = DI::httpClient()->fetch($url, 4);
+ }
if (!$img_str) {
return [];
$filesize = strlen($img_str);
try {
- if (function_exists("getimagesizefromstring")) {
- $data = @getimagesizefromstring($img_str);
- } else {
- $tempfile = tempnam(get_temppath(), "cache");
-
- $stamp1 = microtime(true);
- file_put_contents($tempfile, $img_str);
- DI::profiler()->saveTimestamp($stamp1, "file");
-
- $data = getimagesize($tempfile);
- unlink($tempfile);
- }
+ $data = @getimagesizefromstring($img_str);
} catch (\Exception $e) {
return [];
}