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'] .= '' . $item['title'] . ''; + $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['title'] . ''; $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 .= '' . $postTitle . ''; + $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 .= '' . $postTitle . ''; $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 = [];