ホームページ バックエンド開発 PHPチュートリアル Laravel画像処理拡張パッケージの詳細説明 介入・イメージ

Laravel画像処理拡張パッケージの詳細説明 介入・イメージ

Jan 03, 2018 pm 05:41 PM
laravel 対処する 拡大する

この記事では、LaravelにおけるIntervention/image画像処理拡張パッケージのインストールと使い方、使用中に遭遇する可能性のある落とし穴の解決方法を中心に、サンプルコードを交えて詳しく紹介しています。あなたの勉強や仕事に重要な学習価値を必要とする友人は、編集者をフォローして一緒に学習してください。お役に立てれば幸いです。

はじめに

Intervention/image は、Laravel 用にカスタマイズされた画像処理ツールで、画像の作成と編集を簡単に表現できます。

デモ

デモのスクリーンショット


デモの実行

Homesteadを使用してLaravelプロジェクトを素早く実行する方法のドキュメントを参照してください。

記事の概要

    インストール;
  • 基本的な使い方;
  • 以下は詳細な説明です。
  • 1. インストール

1) を使用してインストールします:

composer require intervention/image
ログイン後にコピー

上記のコマンドは、app/config/app.php を変更して ServiceProvider:

// 将下面代码添加到 providers 数组中
'providers' => [
 // ...
 Intervention\Image\ImageServiceProvider::class,
 // ...
 ],


// 将下面代码添加到 aliases 数组中
'aliases' => [
 // ...
 'Image' => Intervention\Image\Facades\Image::class,
 // ...
 ],
ログイン後にコピー
2 を追加します。画像処理ライブラリ

この拡張パッケージはデフォルトで画像処理にPHPのGDライブラリを使用していますが、GDライブラリの画像処理効率はimagemagickライブラリに比べて若干劣るため、画像処理ライブラリimagemagickライブラリに置き換えることを推奨します

始める前に、まず GD または Imagick がローカルにインストールされていることを確認する必要があります。

Intervention Image を使用する場合は、配列パラメーターを ImageManager に渡すだけで、GD と Imagick ライブラリ間の相互切り替えが完了します。 以下に示すように:

// 引入 composer autoload
require 'vendor/autoload.php';

// 导入 Intervention Image Manager Class
use Intervention\Image\ImageManager;

// 通过指定 driver 来创建一个 image manager 实例
$manager = new ImageManager(array('driver' => 'imagick'));

// 最后创建 image 实例
$image = $manager->make('public/foo.jpg')->resize(300, 200);
ログイン後にコピー

さらに、以下に示すように、ImageManager の静的バージョンを使用することもできます:

// 引入 composer autoload
require 'vendor/autoload.php';

// 导入 Intervention Image Manager Class
use Intervention\Image\ImageManagerStatic as Image;

// 通过指定 driver 来创建一个 image manager 实例 (默认使用 gd)
Image::configure(array('driver' => 'imagick'));

// 最后创建 image 实例
$image = Image::make('public/foo.jpg')->resize(300, 200);
ログイン後にコピー
config/image.php 構成ファイルを生成します:
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
ログイン後にコピー
上記のコマンドを実行した後、構成/image.php 設定ファイルがプロジェクト内に生成されます。このファイルを開き、ドライバーを imagick:
return array(
 'driver' => 'imagick'
);
ログイン後にコピー

に変更します。この時点で、この拡張パックは正常にインストールされています!

3. 基本的な使用方法

// 修改指定图片的大小
$img = Image::make('images/avatar.jpg')->resize(200, 200);

// 插入水印, 水印位置在原图片的右下角, 距离下边距 10 像素, 距离右边距 15 像素
$img->insert('images/watermark.png', 'bottom-right', 15, 10);

// 将处理后的图片重新保存到其他路径
$img->save('images/new_avatar.jpg');

/* 上面的逻辑可以通过链式表达式搞定 */
$img = Image::make('images/avatar.jpg')->resize(200, 200)->insert('images/new_avatar.jpg', 'bottom-right', 15, 10);
ログイン後にコピー

4. 機能

基本的な使用法に加えて、この拡張パックは次の機能もサポートしています。

画像のキャッシュ機能。機能: 統一されたルールに従って画像を変換します。

画像の動的処理: アクセスされた画像の URL パラメーターに従って画像サイズを自動的に調整しますその他の例については、公式ドキュメントを参照してください。

介入/画像の小さな落とし穴とその解決方法
  • 実際、介入/iamge は長い間使用されており、その API 設計は非常にシンプルで、ドキュメントも非常に包括的で、非常に簡単です。使用。
  • でも最近、偶然小さな穴を発見しました。 QR コードと WeChat アバターを合成する必要があるため、Image::make($avatarUrl) (ここでの $avatarUrl は WeChat アバターへのリンクです) を使用してアバターを生成し、それを QR コード画像に合成します (テンプレートの背景の使用やテキストの書き込みなど、他の操作も含まれます)。

    書いた後に実行してみると、かなり遅いことが分かり、平均で23秒ほどかかりました。最初は合成時の操作が多くサイズも比較的大きかったのでこのくらいの速度になっているのかと思いました。しかし、少し時間ができたので、速度を向上させることはできなかったとしても、最適化に時間がかかる理由を少なくとも理解することができました。
  • これに苦労した結果、真実は合成操作の数やサイズとはほとんど関係がないことがわかりました。ポイントはアバターデータを作成するポーズにあります。

    この問題を説明するために、次のコードが比較のために特別に作成されました。
  • // 记录开始时间
    $startTimestamp = microtime(true);
    
    $url = 'http://wx.qlogo.cn/mmopen/XxT9TiaJ1ibf06TNRCMjQADS4opDHvQLguLZHpqkRlvuJYZicvJW4iaOalPsKIs0kpZ3F6864ZzibyObYiaucUQSrdp4pFTNDyIpxw/0';
    
    $avatar = \Image::make($url);
    
    // 记录结束时间
    $endTimestamp = microtime(true);
    
    info($startTimestamp);
    info($endTimestamp);
    info($endTimestamp - $startTimestamp);
    ログイン後にコピー
上記のコードは、Image::make($url) の形式を使用して、URL から直接アバターを生成します。記録されたログデータから判断すると、所要時間は基本的に 16 秒程度です。

その後、新しい姿勢を考えましたが、実はそれを最適化しようとしているときに思いつきました。以下のコードを参照してください:

$startTimestamp = microtime(true);

$client = new \GuzzleHttp\Client();

$url = 'http://wx.qlogo.cn/mmopen/XxT9TiaJ1ibf06TNRCMjQADS4opDHvQLguLZHpqkRlvuJYZicvJW4iaOalPsKIs0kpZ3F6864ZzibyObYiaucUQSrdp4pFTNDyIpxw/0';

$avatarResponse = $client->get($url);

$avatar = \Image::make($avatarResponse->getBody()->getContents());

$endTimestamp = microtime(true);

info($startTimestamp);
info($endTimestamp);
info($endTimestamp - $startTimestamp);
ログイン後にコピー
ここでは、最初に GuzzleHttp を使用してアバターを取得し、次に Image::make($data) を使用してアバターを作成します。 注意、もうすぐクライマックスです…サングラス

以下のログのスクリーンショットを見てください。3 回にかかった平均時間は約 0.07 秒で、前の 16 秒よりも 200 倍以上悪いです。

なぜこの現象が起こるのかはまだわかりませんが、これは間違いなく便利でニッチな体験です。

関連する推奨事項:

Laravelのローカリゼーションモジュールの詳細な説明

Laravelでルーティングパラメータを取得する方法の詳細な説明

ロードプロセスの詳細な説明ファサードの原理ララベル

以上がLaravel画像処理拡張パッケージの詳細説明 介入・イメージの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? PHP でオブジェクト リレーショナル マッピング (ORM) を使用してデータベース操作を簡素化するにはどうすればよいですか? May 07, 2024 am 08:39 AM

PHP でのデータベース操作は、オブジェクトをリレーショナル データベースにマップする ORM を使用して簡素化されます。 Laravel の EloquentORM を使用すると、オブジェクト指向構文を使用してデータベースと対話できます。モデル クラスを定義したり、Eloquent メソッドを使用したり、実際にブログ システムを構築したりすることで ORM を使用できます。

Laravel と CodeIgniter の最新バージョンの比較 Laravel と CodeIgniter の最新バージョンの比較 Jun 05, 2024 pm 05:29 PM

Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel - アーティザンコマンド Laravel - アーティザンコマンド Aug 27, 2024 am 10:51 AM

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Jun 01, 2024 pm 01:34 PM

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Jun 05, 2024 pm 07:50 PM

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 am 09:09 AM

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

PHPコードの単体テストと統合テスト PHPコードの単体テストと統合テスト May 07, 2024 am 08:00 AM

PHP 単体テストおよび統合テスト ガイド 単体テスト: コードまたは関数の単一単位に焦点を当て、PHPUnit を使用して検証用のテスト ケース クラスを作成します。統合テスト: 複数のコードユニットがどのように連携するかに注意し、PHPUnit の setUp() メソッドと TearDown() メソッドを使用してテスト環境をセットアップおよびクリーンアップします。実際のケース: PHPUnit を使用して、データベースの作成、サーバーの起動、テストコードの作成など、Laravel アプリケーションの単体テストと統合テストを実行します。

Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 pm 05:29 PM

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。

See all articles