ホームページ バックエンド開発 PHPチュートリアル PHP画像ウォーターマークの追加、圧縮、カットのカプセル化

PHP画像ウォーターマークの追加、圧縮、カットのカプセル化

Jul 30, 2016 pm 01:31 PM
gt image param this type

PHPは主にGDライブラリ拡張子を使って画像ファイルを操作します。画像を操作するために PHP を頻繁に使用すると、必然的に多くの関数をカプセル化することになります。そうしないと、反復的なコードが多すぎます。画像に関する機能が多い場合、それらの機能を整理することも考えられるので、クラスにカプセル化するという考え方があります。

画像を操作するには主に 4 つのステップがあります:

  1. 画像を開く
  2. 画像を操作する
  3. 画像を出力する
  4. 画像を破棄する

3 つのステップ 1、3、4 は毎回記述する必要があり、毎回ほぼ同じ。本当に変更する必要があるのは、画像を操作するステップだけです。画像の操作は、多くの場合、1 つ以上の主要な GD 関数を通じて行われます。

この記事では、クラス内の 4 つのメソッド、テキスト ウォーターマーク (imagettftext())、画像ウォーターマーク (imagecopymerge())、画像圧縮、画像切り取り (imagecopyresampled()) をカプセル化します。残りの一般的に使用される GD 関数は含まれません。詳しく説明されています。コードに直接移動します:

<?<span>php 

</span><span>class</span><span> Image
{    
    </span><span>private</span><span> $info;

    </span><span>private</span><span> $image;
    </span><span>public</span><span> $type;
    </span><span>public</span><span> function __construct($src)
    {

        $</span><span>this</span>->info=<span>getimagesize($src);
        $</span><span>this</span>->type=image_type_to_extension($<span>this</span>->info[<span>'</span><span>2</span><span>'</span>],<span>false</span><span>);
        $fun</span>=<span>"</span><span>imagecreatefrom{$this->type}</span><span>"</span><span>;
        $</span><span>this</span>->image=<span>$fun($src);
    }
    </span><span>/*</span><span>*
     * 文字水印
     * @param  [type]  $font     字体
     * @param  [type]  $content  内容
     * @param  [type]  $size     文字大小
     * @param  [type]  $col      文字颜色(四元数组)
     * @param  array   $location 位置 
     * @param  integer $angle    倾斜角度
     * @return [type]           
     </span><span>*/</span><span>public</span> function fontMark($font,$content,$size,$col,$location,$angle=<span>0</span><span>){
        $col</span>=imagecolorallocatealpha($<span>this</span>->image, $col[<span>'</span><span>0</span><span>'</span>], $col[<span>'</span><span>1</span><span>'</span>], $col[<span>'</span><span>2</span><span>'</span>],$col[<span>'</span><span>3</span><span>'</span><span>]);

        imagettftext($</span><span>this</span>->image, $size, $angle, $location[<span>'</span><span>0</span><span>'</span>], $location[<span>'</span><span>1</span><span>'</span><span>], $col,$font,$content);
    }
    
    </span><span>/*</span><span>*
     * 图片水印
     * @param  [type] $imageMark 水印图片地址
     * @param  [type] $dst       水印图片在原图片中的位置
     * @param  [type] $pct       透明度
     * @return [type]            
     </span><span>*/</span><span>public</span><span> function imageMark($imageMark,$dst,$pct){
        $info2</span>=<span>getimagesize($imageMark);
        $type</span>=image_type_to_extension($info2[<span>'</span><span>2</span><span>'</span>],<span>false</span><span>);
        $func2</span>=<span>"</span><span>imagecreatefrom</span><span>"</span><span>.$type;
        $water</span>=<span>$func2($imageMark);

        imagecopymerge($</span><span>this</span>->image, $water, $dst[<span>0</span>], $dst[<span>1</span>], <span>0</span>, <span>0</span>, $info2[<span>'</span><span>0</span><span>'</span>], $info2[<span>'</span><span>1</span><span>'</span><span>], $pct);
        imagedestroy($water);

    }
    </span><span>/*</span><span>*
     * 压缩图片
     * @param  [type] $thumbSize 压缩图片大小
     * @return [type]            [description]
     </span><span>*/</span><span>public</span><span> function thumb($thumbSize){
        $imageThumb</span>=imagecreatetruecolor($thumbSize[<span>0</span>], $thumbSize[<span>1</span><span>]);
        
        imagecopyresampled($imageThumb, $</span><span>this</span>->image, <span>0</span>, <span>0</span>, <span>0</span>, <span>0</span>, $thumbSize[<span>0</span>], $thumbSize[<span>1</span>], $<span>this</span>->info[<span>'</span><span>0</span><span>'</span>], $<span>this</span>->info[<span>'</span><span>1</span><span>'</span><span>]);
        imagedestroy($</span><span>this</span>-><span>image);
        $</span><span>this</span>->image=<span>$imageThumb;
    }
    </span><span>/*</span><span>*
    * 裁剪图片
     * @param  [type] $cutSize  裁剪大小
     * @param  [type] $location 裁剪位置
     * @return [type]           [description]
     </span><span>*/</span><span>public</span><span> function cut($cutSize,$location){
         $imageCut</span>=imagecreatetruecolor($cutSize[<span>0</span>],$cutSize[<span>1</span><span>]);

         imagecopyresampled($imageCut, $</span><span>this</span>->image, <span>0</span>, <span>0</span>, $location[<span>0</span>], $location[<span>1</span>],$cutSize[<span>0</span>],$cutSize[<span>1</span>],$cutSize[<span>0</span>],$cutSize[<span>1</span><span>]);
         imagedestroy($</span><span>this</span>-><span>image);
         $</span><span>this</span>->image=<span>$imageCut;
     }
    </span><span>/*</span><span>*
     * 展现图片
     * @return [type] [description]
     </span><span>*/</span><span>public</span><span> function show(){
        header(</span><span>"</span><span>content-type:</span><span>"</span>.$<span>this</span>->info[<span>'</span><span>mime</span><span>'</span><span>]);

        $funn</span>=<span>"</span><span>image</span><span>"</span>.$<span>this</span>-><span>type;

        $funn($</span><span>this</span>-><span>image);
    }
    </span><span>/*</span><span>*
     * 保存图片
 * @param  [type] $newname 新图片名
 * @return [type]          [description]
 </span><span>*/</span><span>public</span><span> function save($newname){
         header(</span><span>"</span><span>content-type:</span><span>"</span>.$<span>this</span>->info[<span>'</span><span>mime</span><span>'</span><span>]);

         $funn</span>=<span>"</span><span>image</span><span>"</span>.$<span>this</span>-><span>type;

         $funn($</span><span>this</span>->image,$newname.<span>'</span><span>.</span><span>'</span>.$<span>this</span>-><span>type);
     }
     </span><span>public</span><span> function __destruct(){
         imagedestroy($</span><span>this</span>-><span>image);
     }

 }

 </span>?>
ログイン後にコピー

他の操作が必要な場合は、このクラスに追加してください~~

上記は、PHP 画像ウォーターマークの追加、圧縮、カットのカプセル化を内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

Go での Type キーワードの用途は何ですか? Go での Type キーワードの用途は何ですか? Sep 06, 2023 am 09:58 AM

Go での Type キーワードの使用には、新しい型エイリアスの定義または新しい構造型の作成が含まれます。詳細な導入: 1. 型エイリアス。既存の型のエイリアスを作成するには、「type」キーワードを使用します。このエイリアスは新しい型を作成しませんが、既存の型に新しい名前を提供するだけです。型エイリアスはコードを改善できます。コードの可読性により、コードがより明確になります; 2. 構造タイプ。新しい構造タイプを作成するには、「type」キーワードを使用します。構造は、複数のフィールドを含むカスタム タイプを定義するために使用できる複合タイプです。

Ubuntu のモバイル ハードディスク エラーの解決: ファイル システム タイプ exfat が不明です Ubuntu のモバイル ハードディスク エラーの解決: ファイル システム タイプ exfat が不明です Jan 05, 2024 pm 01:18 PM

Ubuntu がモバイル ハードディスクをマウントするとエラーが発生します: mount:knownfilesystemtype'exfat' 処理方法は次のとおりです: Ubuntu13.10 または exfat-fuse をインストール: sudoapt-getinstallexfat-fuseUbuntu13.04 以下 sudoapt-add-repositoryppa:relan /exfatsudoapt-getupdatesudoapt-getinstallfuse- exfatCentOS Linux マウント exfat フォーマットの USB ディスク エラー解決方法 CentOS で extfa をロードする

Bing Image Creatorを無料で使用する方法 Bing Image Creatorを無料で使用する方法 Feb 27, 2024 am 11:04 AM

この記事では、無料の BingImageCreator を使用して高品質の出力を取得する 7 つの方法を紹介します。 BingImageCreator (現在は ImageCreator for Microsoft Designer として知られています) は、優れたオンライン人工知能アート ジェネレーターの 1 つです。ユーザーのプロンプトに基づいて、非常にリアルな視覚効果を生成します。プロンプトがより具体的、明確、創造的であればあるほど、より良い結果が得られます。 BingImageCreator は、高品質の画像の作成において大きな進歩を遂げました。 Dall-E3 トレーニング モードを使用するようになり、より高いレベルの詳細とリアリズムが表示されます。ただし、一貫して HD 結果を生成できるかどうかは、高速な処理などのいくつかの要因によって決まります。

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

Xiaomi 携帯電話から画像を削除する方法 Xiaomi 携帯電話から画像を削除する方法 Mar 02, 2024 pm 05:34 PM

Xiaomi 携帯電話で画像を削除する方法? Xiaomi 携帯電話で画像を削除できますが、ほとんどのユーザーは画像の削除方法を知りません. 次に、編集者が提供する Xiaomi 携帯電話での画像の削除方法に関するチュートリアルです。ぜひご参加ください。 Xiaomi 携帯電話で画像を削除する方法 1. まず Xiaomi 携帯電話の [アルバム] 機能を開きます; 2. 次に、不要な写真を確認して右下の [削除] ボタンをクリックします; 3. 次に、[アルバム] をクリックします。上部にある特別な領域に入り、[ごみ箱]を選択します; 4. 次に、下図に示すように[ごみ箱を空にする]を直接クリックします; 5. 最後に[完全に削除]を直接クリックして完了します。

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

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

See all articles