フィルターをかけた画像を上書き or 複製(コピー)する:【70日目】WordPress1日1プラグイン


Warning: Use of undefined constant width - assumed 'width' (this will throw an Error in a future version of PHP) in /home/en3/paka3.net/public_html/wp-content/plugins/paka3_shortCodePostLinks/paka3_shortCodePostLinks.php on line 63

Warning: Use of undefined constant width - assumed 'width' (this will throw an Error in a future version of PHP) in /home/en3/paka3.net/public_html/wp-content/plugins/paka3_shortCodePostLinks/paka3_shortCodePostLinks.php on line 63

Warning: Use of undefined constant width - assumed 'width' (this will throw an Error in a future version of PHP) in /home/en3/paka3.net/public_html/wp-content/plugins/paka3_shortCodePostLinks/paka3_shortCodePostLinks.php on line 63

ようこそのお運びで、厚く御礼申し上げます。
70日目です。前回GDライブラリを使ってフィルターをかけましたが、今回はその画像を「上書き」だけじゃなく「複製」をしてみようと思います。

画像ファイルにフィルターをかけ、画像ファイルを「上書き」と「複製(コピー)」の選択をできるようにする。

「メディア」に保存されている画像に対して、GDライブラリのフィルターをかけて、画像加工をします。その際、上書きと複製(コピー)を選択できるようにする。※今回もJPEG限定。

GDや画像の再作成については前回の記事を参照。

GDライブラリフィルターについては前回を参照してください。

※また、サムネイル画像の再構成については、こちらの記事を参照してください。

今回の仕様について

今回は、前回のGDライブラリのフィルターの操作についてコードに、「複製(コピー)」機能をも持たせます。※前回は「上書き」のみでした。

  • 前回のフィルター適用のコードをカスタマイズ
  • 操作画面で、チェックボックス「上書きする」を追加する
  • 上書きするにチェックがある場合は、画像を「上書き
  • 上書きするにチェックがない場合は、画像を「複製(コピー)」する
  • コピーの場合、画像をコピー後、サムネイル等を再構成(再作成)をする

画面遷移について

メニューや大枠の流れは前回を参照してください。
画像のIDをひとつ入力します。
また「上書き」のチェックボックスを入れなければ画像が複製されます。

140331-0002
前回同様はわかりやすくテキスト入力にしていますここは過去の記事等を参照してメディアアップローダ等を使うと良いと思います。

ボタンをクリックすると、画像が変換されサムネイル等の画像が再作成されます。
チェックを入れていなかったので新しい画像IDでファイルが複製されています。
140331-0009

確認する方法は

直接「メディア」を開いて確認しましょう。

画像IDの確認方法
メディア>ライブラリから画像を選択すると以下のURLになります。140330-0005「post=****」というのが画像IDになります。

変換の確認はメディアからおこないます。
今回は複製(コピー)なので、一覧からも確認できます
一覧
140331-0008

変換前
140331-0006

変換後(モノクロ変換)
140331-0007

「複製(コピー)」のコードの流れを書いてみる

それでは、functions.phpやプラグインファイルに書いていきます。
今回のポイントは、前回のコードをもとに複製の機能を追加するところです。

前回のコードも合わせて確認しておきましょう。

まず、コピー元の情報を取得します。

  $imgID=$_POST['imgID'];
  //画像のパス
  $imgPath = get_attached_file( $_POST['imgID']);
  //画像のURL
  $imgURL  = wp_get_attachment_link( $imgID );

条件分岐の後、複製(コピー)の処理を行います。

上書きor複製などの条件分岐の説明は省略しますので後ほど全体で確認してください。

//新しい画像を作成します
$d=date("U");//ファイル名のシリアル
$newImgPath = dirname($imgPath).'/'.$d."_". basename( $imgPath );

//copy関数でコピー元の画像ファイルの新しく複製します.
//成功したら次の処理
if(copy($imgPath,$newImgPath)){
   //コピー元のファイルと同一ディレクトリに保存
   $wp_filetype = wp_check_filetype(basename($newImgPath), null );
   $attachment = array(
               'guid'  => $imgURL . '/' . basename( $newImgPath ),
               'post_mime_type' => $wp_filetype['type'],
               'post_title' => preg_replace('/\.[^.]+$/', '', basename($newImgPath)),
               'post_content' => '',
               'post_status' => 'inherit'
   );

  //wp_insert_attachmentで
  //WordPressに新しくメディアを登録
  //画像IDは新しく取得します。
  $imgID = wp_insert_attachment( $attachment,  $newImgPath , 0 );
  $imgPath = get_attached_file( $imgID );
}
  1. コピー元の情報を取得
  2. copy関数でコピー元の画像ファイルの新しく複製
    ※今回はphpのcopyを使っています。
    ディレクトリはコピー元と同じ場所に保存するように設定。
  3. コピーが成功したら、そのメディアをWordPressに新しく登録します
    WordPress Codex :wp_insert_attachment
  4. 新しい画像IDパスを取得します。

新しい画像に対して、フィルター適用→サムネイル再作成。

前回と同じ機能です。

//フィルターを適用し画像を変換する関数
$str .= $this->imageGdfunc($imgPath);
//再作成
$metadata = wp_generate_attachment_metadata( $imgID , $imgPath );
if (!empty( $metadata ) && ! is_wp_error( $metadata ) ) {
	 wp_update_attachment_metadata( $imgID , $metadata );
}

新しく作成したファイルに対してフィルター適用し、サムネイル画像などを再作成します。

コードをプラグイン用のファイルにします

それではfunction.phpに書いたコードを消して、
Paka3ReImg.php」というファイルを作成し、以下のコードを記入します。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

今回は、画像の複製について書いてみました。画像を編集していて上書きだけだとちょっとダメかなーと思って調べてみましたが、copyを使う方法以外を見つけることができませんでした。今回はとりあえずこれでいきましょう。次回は合成とかしてみようと思います。

wordpress1日1プラグイン

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です