Imagemagickを使った複数画像の合成

Imagemagickを使って画像を合成する方法がややこしいので整理する。

 Layering -- IM v6 Examples

 

・compositeを使う方法(→JPEGには不向き)

  convert -size 100x100 xc:skyblue comp_resize.gif
  composite -geometry 40x40+5+10  balloon.gif comp_resize.gif comp_resize.gif
  composite -geometry      +35+30 medical.gif comp_resize.gif comp_resize.gif
  composite -geometry 24x24+62+50 present.gif comp_resize.gif comp_resize.gif
  composite -geometry 16x16+10+55 shading.gif comp_resize.gif comp_resize.gif

 

このように、同じファイルを上書きして開いて保存していくことはできる。

As all input images are read in by ImageMagick BEFORE the output image is opened, you can output to one of the input images. This allows you to work on the same image over and over, as shown above, without problems.

 

ただし、この方法はロスが多いのでJPEGには使うな、と注意書きがある。

 Do not do this with a lossy image format like "JPEG" as the format errors are accumulative, and the base image will quickly degrade.

 

・convert を使う方法 (→まあまあ)

  convert -size 100x100 xc:skyblue \
          balloon.gif  -geometry 40x40+5+10   -composite \
          medical.gif  -geometry      +35+30  -composite \
          present.gif  -geometry 24x24+62+50  -composite \
          shading.gif  -geometry 16x16+10+55  -composite \
          compose_geometry.gif

 

ここで、-geometry は、所定の位置に配置するだけではなく、直前の画像を-resizeすると書かれている。

Now the "-geometry" is is a very special operator that not only sets an overlay position for the next "-composite" operation, it will also "-resize" the last image (and only the last image) in the current image sequence.

ただし、これは便利だが使うな、と書かれている。

Note it is recommended that you avoid this 'resize' side-effect of of the "-geometry", even if it is convenient.

リサイズする場合は、以下のように書け、と書かれている。

  convert -size 100x100 xc:skyblue \
          \( balloon.gif -resize 40x40 \) -geometry +5+10   -composite \
          \( medical.gif               \) -geometry +35+30  -composite \
          \( present.gif -resize 24x24 \) -geometry +62+50  -composite \
          \( shading.gif -resize 16x16 \) -geometry +10+55  -composite \
          compose_resize.gif

 

・Drawを使う方法(→画像を変形させる場合は不向き)

 convert -size 100x100 xc:skyblue \
          -draw "image over  5,10 0,0 'balloon.gif'" \
          -draw "image over 35,30 0,0 'medical.gif'" \
          -draw "image over 62,50 0,0 'present.gif'" \
          -draw "image over 10,55 0,0 'shading.gif'" \
          drawn.gif

-drawを使うと、その過程で回転や拡大もできるが、その動きは”トリッキー”だ、と書かれている。→そんなこと書かれると使えない。

 

・Layerを使う方法(→おすすめ)

基本構文は以下。

  convert -size 100x100 xc:skyblue \
          -page +5+10  balloon.gif \
          -page +62+50 present.gif \
........... -layers flatten flatten_canvas.gif

ただし、画像を変形させた後、指定位置に配置しようと思い、以下のように書くとうまくいかなかった。

(うまくいかない例)

 ---------------------------------------

exec ("convert -size 500x1000 xc:white \
-page +10+10 \( aaa.jpg -resize 50x50 \) \
-page +50+100 \( bbb.jpg -resize 50x50 \) \
-layers flatten final.jpg");

 ---------------------------------------

上記の場合、「-page」で指定している位置が、[-resize]の影響を受けるようで、

位置が思う位置に来なかった。

 

結論としては、以下のように書くとうまくいった。

---------------------------------------------

convert -size 500x1000 xc:white \
\( aaa.jpg -resize 50x50 -repage +50+100 \) \
\( bbb.jpg -resize 100x100 -repage +100+200 \) \
-layers flatten final.jpg"

---------------------------------------------

 

 [-repage]は、使用時点でリストに入っている全ての画像に影響を及ぼす。

よって、特定の画像のみに適用させる場合は、括弧を使う。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fabric.js

こんな便利なやつがあったんだ・・・

ちょっと衝撃

http://yamineko.lv9.org/Fabric.js

Acrobat pro Xで、二重トンボのつけ方

1.ページボックス設定

  上 13mm

  下 13mm

  左 10mm

  右 10mm

2.トンボを追加

  センター&コーナートンボ設定

  線種:InDesignJ2

 

3.ページボックス設定

  上 10mm

  下 10mm

  左 13mm

  右 13mm

4.トンボを追加

  コーナートンボのみ設定

  線種:InDesignJ2

 

以上

wordpressのSQL文 忘備録

<1列のみ取得する場合>

global $wpdb;

$query = "SELECT user_login, display_name FROM $wpdb->users WHERE ID = '".$value."' AND user_status=0";


$user_info = $wpdb->get_row($query);

 

(値を取り出す時)

$user_login = $user_info->user_login

$display_name $user_info->display_name

 

 

<値を1つのみ取得する場合>

global $wpdb;

$query = "SELECT user_email FROM $wpdb->users WHERE ID = '".$userid."' AND user_status=0";
$user_email = $wpdb->get_var($query);

 

<複数行を取得する場合>

global $wpdb;

$query = SELECT user_id FROM wp1_bp_xprofile_data WHERE field_id = '89' AND value LIKE '%".$val."%' AND user_id != '".$userid."'";

$results = $wpdb->get_results($query);

foreach ($results as $value) {

    $user_id = $value->user_id

}

 

BuddyPress+bbpress で プロフィールページにリダイレクトされる件

BuddyPressとbbpressを入れていると、

ログイン後に再度ログインページなどにアクセスすると、

BuddyPressのプロフィールページにリダイレクトされることがあった。

 

調べると、

bbp_logged_in_redirect()

という関数が、デフォルトでプロフィールページにリダイレクトさせるようになっていることがわかった。

hookr.io

引数にリダイレクト先を指定できるようなので、指定することで解決した。

 

と思ったけど、解決してなかった。

どうも、theme-by-login という別のプラグインが原因のようだ。

調べるのも面倒くさいので、/profile に入ったらhomeにリダイレクトさせるようにした。

header.php

<?php 

$nowurl = get_the_permalink();
if (strstr($nowurl, '/profile')) {
wp_safe_redirect( 'http://www.soranowa.org/home' );
exit;
}

?>

 

 

 

BuddyPress 友達でない人にプライベートメッセージが送信できないようにする

BuddyPressの検証していてわかったことだが、友達になっていない人にも、プライベートメッセージ送ることができてしまうようだ。

 

そこで、友達でない人には、プライベートメッセージを送れなくする。

 

function.phpに以下を追記すればよい。

---------------------------

add_filter( 'bp_get_send_message_button', function( $array ) {
if ( friends_check_friendship( bp_loggedin_user_id(), bp_displayed_user_id() ) ) {
  return $array;
} else {
  return '';
}
} );

---------------------------

 

以上

 

ページとファイルの忘備録

(自分用のメモ)

・新規会員登録画面→register-form.php

 

・/archive/ → 大枠はpage.php、中は /template-parts/content-page.php

 

・掲示板一覧→archive-forum.php

 

・個別の掲示板のカテゴリー&

各カテゴリーのトピック一覧 →single-forum.php

 

・個別のトピック→single_topic.php & /bbpress/content-single-topic.php

(この中で色々なパーツを読みだしているので、詳しくはcontent-single-topic.phpの中を見ること)