Heim Backend-Entwicklung PHP-Tutorial PHP下使用强大的imagick轻巧生成组合缩略图

PHP下使用强大的imagick轻巧生成组合缩略图

Jun 13, 2016 pm 12:28 PM
gt height thumbnail width

PHP下使用强大的imagick轻松生成组合缩略图

project: blogtarget: use-imagick-to-composite-images-thumbnail.mddate: 2016-02-19status: publishtags:    - php    - imagick    - thumbnailcategories:    - php
Nach dem Login kopieren

这里说的imagickImageMagick 在PHP下的扩展。使用pecl安装起来那叫一个轻松简单 —— 一条命令就搞定:

sudo pecl install imagick
Nach dem Login kopieren

(扩展装好后还是要在php.ini中加上extension=imagick.so,然后记得重启apachephp-fpm服务。)

最近有个需求是要把多张图片组合起来生成缩略图,刚好用用这个强大的imagick扩展。
这个需求是要这样生成缩略图:

  1. 如果有1张图片,就直接生成这张图片的缩略图;
  2. 如果有2张图片,则一张在左边一张在右边,各一半;
  3. 如果有3张图片,则两张左边平均分配,一张独占右边;
  4. 如果有4张图片,则像田字格一样平均分配空间;
  5. 更多张图片,则只取前4张,按田字格方式生成缩略图。

这规则还真不少,不过还不算太过复杂,很快搞出来了:

namespace \clarence\thumbnail;class Thumbnail extends \Imagick{    /**     * @param array $images     * @param int $width     * @param int $height     * @return static     * @throws ThumbnailException     */    public static function createFromImages($images, $width, $height){        if (empty($images)){            throw new ThumbnailException("No images!");        }        $thumbnail = new static();        $thumbnail->newImage($width, $height, 'white', 'jpg');        $thumbnail->compositeImages($images);        return $thumbnail;    }    public function compositeImages($images){        $imagesKeys = array_keys($images);        $compositeConfig = $this->calcCompositeImagesPosAndSize($images);        foreach ($compositeConfig as $index => $cfg){            $imgKey = $imagesKeys[$index];            $img = new \Imagick($images[$imgKey]);            $img = $this->makeCompositeThumbnail($img, $cfg);            $this->compositeImage($img, self::COMPOSITE_OVER, $cfg['to']['x'], $cfg['to']['y']);        }    }    protected function makeCompositeThumbnail(\Imagick $img, $cfg){        $img->cropThumbnailImage($cfg['size']['width'], $cfg['size']['height']);        return $img;    }    protected function calcCompositeImagesPosAndSize($images){        $width = $this->getImageWidth();        $height = $this->getImageHeight();        switch(count($images)){            case 0:                throw new ThumbnailException("No images!");            case 1:                // | 0 |                return [                    0 => [                        'to' => [ 'x' => 0, 'y' => 0 ],                        'size' => [                            'width' => $width,                            'height' => $height,                        ]                    ]                ];            case 2:                // | 0 | 1 |                return [                    0 => [                        'to' => [ 'x' => 0, 'y' => 0 ],                        'size' => [                            'width' => $width / 2,                            'height' => $height,                        ]                    ],                    1 => [                        'to' => [ 'x' => $width / 2, 'y' => 0],                        'size' => [                            'width' => $width / 2,                            'height' => $height,                        ]                    ]                ];            case 3:                // | 0 | 1 |                // | 2 |   |                return [                    0 => [                        'to' => [ 'x' => 0, 'y' => 0 ],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                    1 => [                        'to' => [ 'x' => $width / 2, 'y' => 0],                        'size' => [                            'width' => $width / 2,                            'height' => $height,                        ]                    ],                    2 => [                        'to' => [ 'x' => 0, 'y' => $height / 2 ],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                ];            default:                // >= 4:                // | 0 | 1 |                // | 2 | 3 |                return [                    0 => [                        'to' => [ 'x' => 0, 'y' => 0 ],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                    1 => [                        'to' => [ 'x' => $width / 2, 'y' => 0],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                    2 => [                        'to' => [ 'x' => 0, 'y' => $height / 2 ],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                    3 => [                        'to' => [ 'x' => $width / 2, 'y' => $height / 2],                        'size' => [                            'width' => $width / 2,                            'height' => $height / 2,                        ]                    ],                ];        }    }}
Nach dem Login kopieren

用个试试:

$thumbnail = \clarence\thumbnail\Thumbnail::createFromImages($srcImages, 240, 320);$thumbnail->writeImage($outputDir."/example.jpg");
Nach dem Login kopieren

效果立马出来了:

赞一个~

(详细代码见 http://github.com/clarence-pan/thumbnail)

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Welche Datei ist ein Miniaturbild? Welche Datei ist ein Miniaturbild? Jan 25, 2021 am 11:23 AM

Miniaturansicht ist eine Cache-Datei. Miniaturansicht ist eine Datei, die aus dem Cache-Miniaturbild der mit dem Mobiltelefon gelieferten Kamera erstellt wird. Der Hauptgrund für die Erstellung dieser Datei besteht darin, dass die Miniaturansicht des Mobiltelefonfotos automatisch zwischengespeichert wird es als Cache, d. h. nachdem der Benutzer das Foto angesehen hat, wird in diesem Ordner eine Cache-Miniaturansicht generiert.

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Was bedeutet die Breite von HTML? Was bedeutet die Breite von HTML? Jun 03, 2021 pm 02:15 PM

In HTML5 bedeutet „Breite“ die Breite des Inhaltsbereichs. Sie können innere Ränder, Ränder und äußere Ränder außerhalb des Inhaltsbereichs hinzufügen Element.

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone Jul 29, 2023 am 08:22 AM

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Detaillierte Erläuterung der CSS-Dimensionseigenschaften: Höhe und Breite Detaillierte Erläuterung der CSS-Dimensionseigenschaften: Höhe und Breite Oct 21, 2023 pm 12:42 PM

Detaillierte Erläuterung der CSS-Dimensionseigenschaften: Höhe und Breite In der Frontend-Entwicklung ist CSS eine leistungsstarke Stildefinitionssprache. Unter diesen sind Höhe und Breite die beiden grundlegendsten Dimensionsattribute, mit denen die Höhe und Breite des Elements definiert werden. In diesem Artikel werden diese beiden Eigenschaften im Detail analysiert und spezifische Codebeispiele bereitgestellt. 1. Höhenattribut Das Höhenattribut wird verwendet, um die Höhe eines Elements zu definieren. Sie können Pixel, Prozent oder verwenden

Ist watch4pro besser oder GT? Ist watch4pro besser oder GT? Sep 26, 2023 pm 02:45 PM

Watch4pro und GT verfügen jeweils über unterschiedliche Funktionen und Anwendungsszenarien. Wenn Sie Wert auf umfassende Funktionen, hohe Leistung und ein stilvolles Erscheinungsbild legen und bereit sind, einen höheren Preis in Kauf zu nehmen, ist Watch 4 Pro möglicherweise besser geeignet. Wenn Sie keine hohen funktionalen Ansprüche haben und mehr Wert auf Akkulaufzeit und einen angemessenen Preis legen, ist die GT-Serie möglicherweise besser geeignet. Die endgültige Wahl sollte auf der Grundlage persönlicher Bedürfnisse, Budgets und Vorlieben getroffen werden. Es wird empfohlen, vor dem Kauf Ihre eigenen Bedürfnisse sorgfältig zu prüfen und sich die Bewertungen und Vergleiche verschiedener Produkte anzusehen, um eine fundiertere Entscheidung zu treffen.

See all articles