Vol.867 7.Apr.2023

A3見開きPDFページのA4印刷 Gimp (Pr-8)シリアル(USB)通信

A A3見開きPDFページのA4印刷

by fjk

 カタログなどのPDFファイルで、2ページのA4縦ページが繋がって見開きのA3のページになっていて、さらに表紙ページがA4で、そのまま印刷すると大きさが合わないことがある。
 このような時、windowsで「Microsoft Print to PDF」を使うと、A3見開きページをA4サイズの2ページに分割することが出来る。その手順は、

Acrobat ReaderなどでPDFファイルを開く
1.「印刷」でプリンターに「Microsoft Print to PDF」を選ぶ。
2.ページサイズで「ポスター」を選ぶ
3.「大きいページのみを分割」にチェック
4.「印刷」を実行すると、A3見開きページがA4の2ページとしてPDF化される。
※ うまく2分割されない場合は、倍率を「99%」などに縮小する

通常の印刷設定(A3見開きページ)

2分割印刷設定(A4の2ページに分かれている)


G 無料のラスター画像編集・作成ソフト 〜GIMP

by fjk

 GIMP(ギンプ)とは、1996年にリリースが開始された無料で使えるビットマップ画像編集・作成ソフトで、windows、Mac、Linuxなどのプラットフォームで使うことができ、グラフィックや写真の編集、キャンバスに筆で絵を描くように画像を作成・加工したり、色調補正、トーンカーブ、ヒストグラム、消しゴムなどの各種ブラシ、レイヤー、画像の切り抜き・合成、パス編集、多種多様なプラグイン、モザイク編集、(GIF)アニメーション合成などが行える。
 GIMPは無料のソフトであるが有料のPhotshopと同程度の機能があり、手軽に使うことができる。ベクター画像(図形を数値として表現)用のInkscapeと、ラスター画像(ドットの集まり)用のGIMPがあれば、ほぼ全ての画像データの作成・編集環境が整う。
 ・GIMPの詳細はここなどを参照。
 ・GIMPは、以下のページから入手できる。

公式ホームページ
日本語版ページ
 

GIMPダウンロードページ

GIMPインストール中

GIMP2.10タイトル画面

GIMP起動画面(日本語になっている)

画像を取り込み編集中の画面

ファジー選択で透明化中

★GIMPで背景色を透明にする例
 背景を透明にするには、以下の3つの方法がある

  1. アルファチャンネル(透明色)で背景を透明にする
     アルファチャンネルが無い状態で消しゴムや削除で部分を消すと背景色になるだけで透明にはならないので、事前に以下の手順でアルファーチャンネルを追加する必要がある。
      ・メニューバーのレイヤー > 透明部分 > アルファチャンネルの追加
      ・レイヤー > 透明部分 > アルファチャンネルの追加
       (消しゴムで消す)
         選択範囲で囲った後にDeleteキーで削除
       (ファジー選択を使用)
    @メニュー「ツール(T)」/「選択ツール(S)」/「ファジー選択(Z)」を選択
    A透明にしたい場所をクリック
    B[Delete]キーを押すと背景が透過になる
  2. レイヤーマスクで背景を透明にする
     レイヤーマスク(レイヤーをマスクすることにより編集する機能)を使用して背景を透明にする方法。
      @メニューバーのレイヤー/ レイヤーマスク/ レイヤーマスクの追加 を選択
      A「完全不透明(白)」にチェックを入れて追加を押す
      B透明にしたい部分を黒で塗りつぶす(レイヤーマスクは黒の部分が透明、白はそのまま)

  3. 特定の色を透明にする
     特定の色を指定して透明にすることで背景を透過させる方法で、イラストの様な、単色の背景を持つ画像を透過する際に向いている。
     ◆メニューバーの「レイヤー/> 透明部分 / 色を透明度に」を選択して設定画面を開く。
      さらに「色を透明度に」の設定画面で   
    Color:透明にする色(スポイトアイコンで画像から色選択も可)
    Transparency threshold:透過のしきい値
    Opacity threshold:不透過のしきい値(似た色をどこまで選ぶかを指定)

※ 透明に対応している主な画像フォーマットは、PNG、GIF、WebP
※ 文字(テキストレイヤー)の背景はデフォルトで透明。
※【参考】「すぐに作れる ずっと使える GIMP の すべてが身につく本」(技術評論社)など


P Processing (8)  〜シリアル(USB)通信

by fjk

 Processinngにはserialライブラリーが標準で付属しているので、USBを使ったシリアル通信が簡単に実現できる。そこで、abc839で紹介したUSB接続PICを使って、シリアル送受信をテストした。

  1. シリアルポート番号を指定しデータを受信
     USBを使うには、使用できるシリアルポートの番号が知る必要がある。
     @ serialライブラリを使用するため、import processing.serial.* で宣言する。
     A USB接続された全てのシリアル機器のリストは Serial.list()で得る(配列は0〜)。
     B Serialクラス変数(例えばmyPort)に Serial()関数で接続するポートを指定(今回は2番目ポート)。
       Serial(parent,portName,baudRate,・・)    −デフォルト[portName="COM1",baudRate=9600]
     C .available()メソッドで受信データがあり、かつ、有効なデータならコンソールに出力する。
     D バイトデータなら .read()、文字列データなら .readstring()、メソッドで取得。
       改行文字まで読み込むなら .readStringUntil("\n")メソッドで文字列を取得

    コンソールに受信データを出力
    import processing.serial.*;
    
    Serial myPort;
    void setup() {
      printArray(Serial.list());
      myPort = new Serial(this, Serial.list()[1], 9600);
    }
    void draw() {
      while (myPort.available() > 0) {
        String inBuffer = myPort.readString();   
        if (inBuffer != null) {
          print(inBuffer);     // 文字列データ
        }
     //   int inByte = myPort.read();
     //   print(inByte);       // バイトデータ
      }
    }
    
  2. シリアルポートと通信速度を選んで送受信
     ・ScrollableListを使ったので java.utl.* も importした。
     ・通信ポートや、通信速度をリストで選択すると、その条件でシリアル通信を(再)接続。
     ・PICは1秒おきにAD変換データを送ってくるので、受信データがあればコンソールに表示。
     ・テキストボックスにデータを入力後、改行すると、その文字列を送信し、PICからのエコーも表示。

    起動時の選択画面例
     

    接続後、テキスト入力時画面
     

    textboxに「abcd300」を入力後、
    エンターキーで確定すると、

     

    コンソールに毎秒のADデータと、
    エコーデータ「abcd300」も表示
    sketch_230330a.pde(zip)
    // シリアルポートと通信速度を選んで接続
    import controlP5.*;
    import java.util.*;
    import processing.serial.*;
    
    ControlP5 cp5;
    ScrollableList d1,d2;
    
    Serial myPort = null;   		// シリアルポート
    List portList;
    String portName;
    
    int srlSpd = 115200;    		// シリアル通信速度
    int rate[] = { 9600, 19200, 38400, 115200 };
    
    void setup() {
      size(450, 250);
      cp5 = new ControlP5(this);
      portList = Arrays.asList(Serial.list());
      //int portIndex = portList.size()-1;
    
      // ScrollableListの設定:( name, x, y, width, height )
      d1 = cp5.addScrollableList("prtLst",20,70,220,160)
           .setBarHeight(30)
           .setItemHeight(30)
           .addItems(portList)
         //.setValue(portIndex)		//初期接続ポート指定
         ;
    
      d2 = cp5.addScrollableList("spdLst",300,70,120,150)
            .setItemHeight(30)
            .setBarHeight(30)
            ;
      for(int r : rate){ d2.addItem(str(r), r); }  //ポート追加
    
      cp5.addTextfield("input",40,20,200,30)
         .setFocus(true)               	// フォーカス時有効
         .setColor(color(255,255,0))    	// 文字色指定
         ;
      cp5.getController("input") 
         .getCaptionLabel()     // Caption.Lable表示場所変更
         .align(ControlP5.LEFT_OUTSIDE,ControlP5.CENTER)
         .setPaddingX(0)
         ;
    }
    
    void draw() {
      background(100);
    }
    
    void spdLst(int n){		// 通信速度が選択されたら
      srlSpd = rate[n];
      setPort();
    }
    
    void prtLst(int n) {		// 通信ポートが選択されたら
      portName = portList.get(n);
      setPort();
    }
    
    void setPort(){	 // 既に接続されていれば切断し、接続する
      if ( myPort != null ) myPort.stop();
      myPort = new Serial(this, portName srlSpd);
      println(portName, srlSpd);
    
    void serialEvent(Serial myPort) {
      		// 受信データがあれば、IDE コンソールに出力
      if ( myPort.available() > 0 ) {
        String str = myPort.readStringUntil('\n');
        if ( str != null ) print(str);
      }
    }
    
    void input (String theText){
      myPort.write(theText+"\n");	//入力データがあれば送信
    }
    


※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。


A3見開きPDFページのA4印刷 Gimp (Pr-8)シリアル(USB)通信