diff --git a/Dockerfile b/Dockerfile
index 974927883b9..740408bb8c9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,6 +13,7 @@ RUN set -xe && \
nss-plugin-pem \
php-curl \
php-fpm \
+ php-gd \
php-intl \
# php-json is enabled by default with PHP 8.2 in Debian 12
php-mbstring \
diff --git a/bridges/InstagramBridge.php b/bridges/InstagramBridge.php
index d4b484bcb8c..8a47eff62e1 100644
--- a/bridges/InstagramBridge.php
+++ b/bridges/InstagramBridge.php
@@ -54,9 +54,14 @@ class InstagramBridge extends BridgeAbstract
],
'defaultValue' => 'all'
],
+ 'image_resolution' => [
+ 'name' => 'Scale images to ',
+ 'exampleValue' => '360',
+ 'required' => true
+ ],
'direct_links' => [
'name' => 'Use direct media links',
- 'type' => 'checkbox',
+ 'type' => 'checkbox'
]
]
@@ -201,10 +206,25 @@ public function collectData()
$item['enclosures'] = $data[1];
break;
case 'GraphImage':
- $item['content'] = '';
- $item['content'] .= '
';
+ $imageOriginal = imagecreatefromstring(file_get_contents($mediaURI));
+ if ($imageOriginal) {
+ $imageSmall = imagescale($imageOriginal, $this->getResolution());
+ $stream = fopen('php://temp', 'r+');
+ imagepng($imageSmall, $stream);
+ rewind($stream);
+ $image = stream_get_contents($stream);
+ $imageData = 'data:image/png;base64,' . base64_encode($image);
+ unset($imageOriginal);
+ unset($imageSmall);
+ unset($image);
+ } else {
+ $imageData = htmlentities($mediaURI);
+ }
+ $item['content'] = '';
+ $item['content'] .= '
';
$item['content'] .= '
' . nl2br(preg_replace($pattern, $replace, htmlentities($textContent)));
$item['enclosures'] = [$mediaURI];
+ unset($imageData);
break;
case 'GraphVideo':
$data = $this->getInstagramVideoData($item['uri'], $mediaURI, $media, $textContent);
@@ -242,10 +262,25 @@ protected function getInstagramSidecarData($uri, $postTitle, $mediaInfo, $textCo
if (in_array($singleMedia->display_url, $enclosures)) {
continue; // check if not added yet
}
- $content .= '';
- $content .= '
';
+ $imageOriginal = imagecreatefromstring(file_get_contents($singleMedia->display_url));
+ if ($imageOriginal) {
+ $imageSmall = imagescale($imageOriginal, $this->getResolution());
+ $stream = fopen('php://temp', 'r+');
+ imagepng($imageSmall, $stream);
+ rewind($stream);
+ $image = stream_get_contents($stream);
+ $imageData = 'data:image/png;base64,' . base64_encode($image);
+ unset($imageOriginal);
+ unset($imageSmall);
+ unset($image);
+ } else {
+ $imageData = htmlentities($singleMedia->display_url);
+ }
+ $content .= '';
+ $content .= '
';
$content .= '
';
array_push($enclosures, $singleMedia->display_url);
+ unset($imageData);
}
}
$content .= '
' . nl2br(htmlentities($textContent));
@@ -367,6 +402,15 @@ public function getURI()
return parent::getURI();
}
+ public function getResolution()
+ {
+ if (!is_null($this->getInput('image_resolution'))) {
+ return $this->getInput('image_resolution');
+ }
+
+ return parent::getResolution();
+ }
+
public function detectParameters($url)
{
$params = [];