リンクをクリップボードにコピー
コピー完了
お世話になります。
テキストを打ち込み、その下にテキストボックスとなる長方形レイヤーを置いています。
その長方形レイヤーは、テキストの文字数に合わせてテキストボックスのサイズも追随するようにしています。
具体的に言うと、
長方形パスの
サイズに
s=thisComp.layer(“Text Layer”);
w=s.sourceRectAtTime().width;
h=s.sourceRectAtTime().height;
[w,h]
位置に
s=thisComp.layer(“Text Layer”);
w=s.sourceRectAtTime().width/2;
h=s.sourceRectAtTime().height/2;
l=s.sourceRectAtTime().left;
t=s.sourceRectAtTime().top;
[w+l,h+t]
というエクスプレッションを入れ込んでいます。
これで、テキストに合わせて長方形レイヤーの横の長さも変わるようになっているのですが、
同じテキストのポイント(大きさ)で、文字数(長さ)を変えると
長方形レイヤーの高さまで変化してしまいます。
この長方形の高さは変える必要がなく一定にしたいのですが、解決法が分かりますでしょうか。
エクスプレッションが間違っているのか、
もしかしたら文字数が多いと、テキストレイヤーの赤いバウンディングボックスが、そもそも大きくなっている(?)ので、
それに合わせて長方形も大きくなっているのかと思いました。
その場合、これのサイズを変えればいいのか..?とか思ったのですが..
説明ベタで申し訳ございません、わかりましたらよろしくお願いいたします。
高さのサイズは固定されているので問題ありませんが、テキストとシェイプのアンカーポイントがずれいているために、位置が上下しているようです。
テキストのアンカーポイントを中心に配置するエクスプレッションは、下記サイトのエクスプレッションをそのまま追加します。
シェイプレイヤーのトランスフォームのアンカーポイントに下記のエクスプレッションを追加。
s=thisComp.layer(1); // テキストレイヤー名
textTop = s.sourceRectAtTime().top;
textHeight = s.sourceRectAtTime().height;
textLeft =s.sourceRectAtTime().left;
textWidth =s.sourceRectAtTime().width;
[textLeft + textWidth/2, 0]
シェイプレイヤーのトランスフォームの位置をテキストレイヤーの位置とリンクさせる。
シェイプレイヤーのトランスフォーム:長方形の位置にあるエクスプレッションは削除。
リンクをクリップボードにコピー
コピー完了
フォントを変更しても同じでしょうか?
漢字「引」の高さがひらがなより高い様な気がするので、漢字のサイズだけ小さくして変化を確認して下さい。
また、全体的に文字に比べてシェイプが大きくなっているので、文字に線幅が設定されていないでしょうか。
リンクをクリップボードにコピー
コピー完了
ご確認頂きまして誠にありがとうございます。
確かに、漢字「引」の高さがひらがなより高いようでした。
どうやら文字によって高さが変わるので、それに合わせてしまい、
漢字などがない(ひらがな だけの)場合はシェイプの高さも低くなる。ようです。
フォントを変えて見たのですが、特に変わらず、どのフォントも高さが文字によって違っているので、
シェイプも変動してしまうようです。
文字に線幅は設定していないと思います。
シェイプには、パスのオフセットを追加して、少し大きくしてあります。
フォントの性質上、シェイプの高さを一定にするのは難しいのでしょうか...?
漢字や高さのあるテキストだけ縮めるのも変ですし、
テロップ毎にオフセットでシェイプの大きさを変えるのも少々面倒なので
なにか解決策があるといいのですが...
リンクをクリップボードにコピー
コピー完了
シェイプの高さは、エクスプレッションの [w,h] のhを数値に変えれば固定できます。
高さの最大サイズを入力すれば良いと思います。
リンクをクリップボードにコピー
コピー完了
ご返事頂き、誠にありがとうございます。
当方、エクスプレッションに弱く申し訳ございません。
位置はそのまま、サイズを
s=thisComp.layer("02")
w=s.sourceRectAtTime().width;
h=s.sourceRectAtTime().height;
[w,100]
としてみましたが、まだ文字によって高さが変わってしまい、固定されません。
ですが、以前よりは変化が小さくなったように思います。
因みに、テキストのサイズを変えてみると、添付のように変わります。
リンクをクリップボードにコピー
コピー完了
高さのサイズは固定されているので問題ありませんが、テキストとシェイプのアンカーポイントがずれいているために、位置が上下しているようです。
テキストのアンカーポイントを中心に配置するエクスプレッションは、下記サイトのエクスプレッションをそのまま追加します。
シェイプレイヤーのトランスフォームのアンカーポイントに下記のエクスプレッションを追加。
s=thisComp.layer(1); // テキストレイヤー名
textTop = s.sourceRectAtTime().top;
textHeight = s.sourceRectAtTime().height;
textLeft =s.sourceRectAtTime().left;
textWidth =s.sourceRectAtTime().width;
[textLeft + textWidth/2, 0]
シェイプレイヤーのトランスフォームの位置をテキストレイヤーの位置とリンクさせる。
シェイプレイヤーのトランスフォーム:長方形の位置にあるエクスプレッションは削除。
リンクをクリップボードにコピー
コピー完了
ご返信、誠にありがとうございます。お付き合い頂き助かります。
こちらで、うまくいったように思います!テキストに関わらず、
高さが一定になったかと存じます。
教えていただいたアンカーポイントを中心に配置するエクスプレッションがうまくいかず、
を参考にしてみまして、以下画像のような内容になりました。
いかがでしょうか、ご確認いただけますと幸甚にございます。
リンクをクリップボードにコピー
コピー完了
解決してなによりです。
すいません、エクスプレッションについては、確認が怠っていました。
参考にしたサイトのエクスプレッションは、CC2018以前のバージョンで使用されていた Extend Script言語で作成されたもので、CC2019から JavaScript言語に移行したのでエラーが出てしまいました。(旧:this , 新:thisLayer)
CC2020でも設定を変更すればエラーは出ないのですが、Java Scriptがこれからの標準になります。
参考ですが、過去のバージョンで作成したプロジェクトを開くとエクスプレッションエラーが出る場合があります。
言語の違いによるエラーの場合は、スクリプト「Update Legacy Expression.jsx」を実行すると自動でJava Scriptに変換できます。
リンクをクリップボードにコピー
コピー完了
なるほど、奥が深いです..
過去のバージョンの件教えていただきまして、誠にありがとうございました!
とても勉強になりました。
またの機会ありましたら、改めてよろしくお願い申し上げます!