# NmagemanCOM

## INDEX

- NmagemanCOMとは？
- 概要
- 動作環境
- パッケージ内容
- 注意事項
- インストール方法
- リファレンス
- 更新履歴
- 謝辞

NmagemanCOMとは？

  NmagemanCOMは画像を扱うことができるCOMライブラリです。

  以下のようなことが可能です。

  - 画像の幅と高さを取得する
  - 画像のフォーマットを取得する(jpg,gif,png,...)
  - 画像のメタデータを取得する(EXIF,GPS,...)
  - 画像のメタデータを消去する
  - 画像の幅や高さを変更して保存する
  - 画像のフォーマットを変更して保存する
  - ストリーム内(メモリなど)の画像を扱う(ADODB.Stream,...)
  - 画像を重ねる(Paste機能)
  - など。。。
概要

  以下に簡単な例を示します。

  Sample.vbs

  '//--- '// ex1: Image is in file. set oNmageman = createobject("NmagemanCOM") if oNmageman.Load("sample.jpg") then oNmageman.Width = 100 '// width to 100px (keep ratio) oNmageman.Save("sample.out.jpg") end if '//--- '// ex2: Image is in stream. set oNmageman = createobject("NmagemanCOM") set oStreamIN = createobject("ADODB.Stream") '{ oStreamIN.open oStreamIN.type = 1 oStreamIN.loadFromFile "sample.jpg" '} set oStreamOUT = createobject("ADODB.Stream") '{ oStreamOUT.open oStreamOUT.type = 1 '} if oNmageman.Load(oStreamIN) then oNmageman.Width = 100 '// | oNmageman.Height = 100 '// | box convertion with 100*100 oNmageman.Format = 13 '// 13: PNG oNmageman.Save(oStreamOUT) oStreamOUT.saveToFile "sample.out2.png", 2 end if '//--- '// ex3: Metadata access set oNmageman = createobject("NmagemanCOM") if oNmageman.Load("metadata.jpg") then set oMetadata = oNmageman.Metadata(1) '// 1: EXIF_MAIN if not oMetadata is nothing then for each sName in oMetadata wscript.echo sName & " : " & oMetadata(sName): next end if wscript.echo "--" set oMetadata = oNmageman.Metadata(2) '// 2: EXIF_EXIF if not oMetadata is nothing then for each sName in oMetadata wscript.echo sName & " : " & oMetadata(sName): next end if wscript.echo "--" set oMetadata = oNmageman.Metadata(3) '// 3: EXIF_GPS if not oMetadata is nothing then for each sName in oMetadata wscript.echo sName & " : " & oMetadata(sName): next end if wscript.echo "--" end if '//--- '// ex4: Paste iamge set oNmagemanBase = createobject("NmagemanCOM") set oNmagemanSeal = createobject("NmagemanCOM") if oNmagemanBase.Load("sample.jpg") and oNmagemanSeal.Load("sample.t.gif") then oNmagemanBase.Paste oNmagemanSeal oNmagemanBase.Save("sample.out4.jpg") end if

  [console output]

  ImageDescription : 080417_1614~01 Make : KDDI-KC Model : W52K Orientation : top, left side ResolutionUnit : inches Tag 0xC4A5 : PrintIM XResolution : 72 YCbCrPositioning : Center of pixel array YResolution : 72 -- BrightnessValue : 0 ColorSpace : sRGB ComponentsConfiguration : YCbCr Contrast : Normal CustomRendered : Normal process DateTimeDigitized : 2008:04:17 16:14:29 DateTimeOriginal : 2008:04:17 16:14:29 DigitalZoomRatio : 100/100 ExifVersion : 0220 ExposureMode : Auto exposure ExposureProgram : Program normal ExposureTime : 1/9 sec Flash : Flash did not fire FlashPixVersion : 0100 MeteringMode : Center weighted average PixelXDimension : 240 PixelYDimension : 320 Saturation : Normal SceneCaptureType : Standard Sharpness : Normal WhiteBalance : Auto white balance -- GPSLatitude : 36:4:0.04 GPSLatitudeRef : N GPSLongitude : 136:14:44.56 GPSLongitudeRef : E GPSMapDatum : WGS-84 GPSProcessingMethod : JIS GPSVersionID : 2 2 0 0 --
動作環境
  Windows 2000, XP, 2003 Server, Vista, Server 2008, 7 and later
パッケージ内容
  NmagemanCOM.dll
    NmagemanCOMライブラリ本体
注意事項
  1. 本ソフトウェアの利用は良識の範囲内でお願い致します。
  2. 本ソフトウェアの利用による損害の保証はお受けできません。
  3. 本ソフトウェアの利用は楽しんで行っていただきますようお願い致します。
インストール方法
  1. "NmagemanCOM.dll" をRegsvr32。
リファレンス
  [ New Color ] [ Update Color ]
  NmagemanCOM Library
    - CoClasses
      - NmagemanCOM
    - Enums
      - EFormat
      - EMetadataModel
      - EResizeConstant
    - INmagemanCOM
      - プロパティ
        - Format
        - Width
        - Height
        - Metadata
      - メソッド
        - Load
        - Save
        - Paste
        - Resize
        - Rotate
        - TextOut
        - Swirl
  NmagemanCOM
    Interface
      INmagemanCOM
    ProgID
      NmagemanCOM
    NOM Name
      NmagemanCOM [default]
  EFormat
    - FMT_UNKNOWN = -1
    - FMT_BMP = 0
    - FMT_ICO = 1
    - FMT_JPEG = 2
    - FMT_JNG = 3
    - FMT_KOALA = 4
    - FMT_LBM = 5
    - FMT_IFF = FMT_LBM
    - FMT_MNG = 6
    - FMT_PBM = 7
    - FMT_PBMRAW = 8
    - FMT_PCD = 9
    - FMT_PCX = 10
    - FMT_PGM = 11
    - FMT_PGMRAW = 12
    - FMT_PNG = 13
    - FMT_PPM = 14
    - FMT_PPMRAW = 15
    - FMT_RAS = 16
    - FMT_TARGA = 17
    - FMT_TIFF = 18
    - FMT_WBMP = 19
    - FMT_PSD = 20
    - FMT_CUT = 21
    - FMT_XBM = 22
    - FMT_XPM = 23
    - FMT_DDS = 24
    - FMT_GIF = 25
    - FMT_HDR = 26
    - FMT_FAXG3 = 27
    - FMT_SGI = 28
    - FMT_EXR = 29
    - FMT_J2K = 30
    - FMT_JP2 = 31
  EMetadataModel
    - MDM_NODATA = -1
    - MDM_COMMENTS = 0 // single comment or keywords
    - MDM_EXIF_MAIN = 1 // Exif-TIFF metadata
    - MDM_EXIF_EXIF = 2 // Exif-specific metadata
    - MDM_EXIF_GPS = 3 // Exif GPS metadata
    - MDM_EXIF_MAKERNOTE = 4 // Exif maker note metadata
    - MDM_EXIF_INTEROP = 5 // Exif interoperability metadata
    - MDM_IPTC = 6 // IPTC/NAA metadata
    - MDM_XMP = 7 // Abobe XMP metadata
    - MDM_GEOTIFF = 8 // GeoTIFF metadata
    - MDM_ANIMATION = 9 // Animation metadata
    - MDM_CUSTOM = 10 // Used to attach other metadata types to a dib
    - MDM_EXIF_RAW = 11 // Exif raw metadata
  EResizeConstant
    - RSZ_NONE = 0
    - RSZ_TOP = 1
    - RSZ_MIDDLE = 2
    - RSZ_BOTTOM = 3
    - RSZ_LEFT = 1
    - RSZ_CENTER = 2
    - RSZ_RIGHT = 3
    - RSZ_OUTERBOX = 1
    - RSZ_INNERBOX = 2
  INmagemanCOM

    画像を様々に扱います。

    プロパティ
      EFormat Format [RW]
        画像のフォーマットを取得・設定します。
        FormatにはLoad時の値が格納されており、Save時にはこの値が利用されます。
        Load時とは別の形式で保存する場合はこの値を変更してからSaveしてください。
      long Width [RW]
        画像の幅を取得・設定します。
        設定した場合は縦横比率固定でリスケール(リサイズ)されます。
      long Height [RW]
        画像の高さを取得・設定します。
        設定した場合は縦横比率固定でリスケール(リサイズ)されます。
      Object Metadata(EMetadataModel eModel) [RW]
        画像のメタデータ(Exif-TIFF,Exif-GPS,etc...)を取得します。
        戻り値は Scripting.Dictionary です。
        指定したeModelのメタデータが存在しない場合はNothingが返ります。
        Nothingを設定すると、指定したeModelのメタデータを消去します。
        eModelが指定されていない場合はすべてのメタデータを消去します。
    メソッド
      bool Load(Variant* pSource)
        pSource
          読み込み元画像。
          ○文字列：画像ファイルへのパス
          ○Object：画像を格納したストリームオブジェクト(IStream)
        戻り値
          成否

        画像を読み込みます。
        読み込みが完了するとFormatに画像形式が格納されます。

      bool Save(Variant* pDest)
        pDest
          画像保存先。
          ○文字列：保存先ファイルへのパス
          ○Object：保存先のストリームオブジェクト(IStream)
        戻り値
          成否

        画像を保存します。
        保存はFormatに指定された形式で行われます。

      void Paste(Object oPut, long nX=0, long nY=0)
        oPut
          貼り付ける画像オブジェクト(NmagemanCOM object)。
          PNGやGIFなどの透過画像を渡すこともできます。
        nX
          貼り付けるX座標。
        nY
          貼り付けるY座標。
        戻り値
          [なし]

        現在の画像に oPut で渡される画像を貼り付けます。
        貼り付ける位置は nX, nY で指定可能です。
        座標は現在の画像の左上が(0,0)です。
        oPutの透過情報(alpha値)は貼り付け処理時に利用されます。
        元画像は強制的に32bit画像に変換されます。

      void Resize(long nWidth, long nHeight, EResizeConstant nMethod = RSZ_NONE, EResizeConstant nHPos = RSZ_LEFT, EResizeConstant nVPos = RSZ_TOP, int nBGColor = 0 )
        nWidth
          変換後の画像の横幅。
        nHeight
          変換後の画像の高さ。
        nMethod
          変換方法。
          RSZ_NONE(0): 通常変換、元画像の縦横比を維持したまま縦横両方におさまるように変換。
          RSZ_OUTERBOX(1): OUTER BOX変換、元画像の一部を切り抜くことで縦横比を調整。
          RSZ_INNERBOX(2): INNER BOX変換、一部余白を加えることで縦横比を調整。
          規定値はRSZ_NONE(0)。
        nHPos
          OUTE BOX変換時、切り抜かれる部分の横位置。
          RSZ_LEFT(1): 元画像の左側を切り抜く。
          RSZ_CENTER(2): 元画像の中央を切り抜く。
          RSZ_RIGHT(3): 元画像の右側を切り抜く。
          INNER BOX変換時、元画像の横位置。
          RSZ_LEFT(1): 元画像を左側に配置。
          RSZ_CENTER(2): 元画像を中央に配置。
          RSZ_RIGHT(3): 元画像を右側に配置。
          規定値はRSZ_LEFT(1)。
        nVPos
          OUTE BOX変換時、切り抜かれる部分の縦位置。
          RSZ_LEFT(1): 元画像の上段部を切り抜く。
          RSZ_CENTER(2): 元画像の中段部を切り抜く。
          RSZ_RIGHT(3): 元画像の下段部を切り抜く。
          INNER BOX変換時、元画像の縦位置。
          RSZ_LEFT(1): 元画像を上段部に配置。
          RSZ_CENTER(2): 元画像を中段部に配置。
          RSZ_RIGHT(3): 元画像を下段部に配置。
          規定値はRSZ_TOP(1)。
        nBGColor
          INNER BOX変換時の背景色。
          VBScriptでは下記のように16進数で指定するとよいでしょう。
          &h000000&(黒)
          &hFF0000&(赤)
          &h00FF00&(緑)
          &h0000FF&(青)
          &hFFFFFF&(白)
          規定値は0。
        戻り値
          [なし]

        現在の画像をリサイズします。

      void Rotate(int nAngle = 0)
        nAngle
          回転する角度を度で指定します。
          0を指定すると、EXIF情報をもとに角度を決めて回転します。
          規定値は0です。
        戻り値
          [なし]

        現在の画像を回転します。

      void TextOut( BSTR sText, long nLeft = 0, long nTop = 0, int nFontHeight = 10, VARIANT vnColor = Empty, VARIANT vnBGColor = Empty, BSTR sFontName = "System", VARIANT_BOOL bBold = False, VARIANT_BOOL bItalic = False )
        sText
          貼り付ける文字列。(必須)
        nLeft
          元画像内での、文字列の左上の横位置。(pixel、規定値:0)
        nTop
          元画像内での、文字列の左上の縦位置。(pixel、規定値:0)
        nFontHeight
          文字列の高さ。(pixel、規定値:10)
        vnColor
          文字列の色。Emptyを指定すると透明になります。
          ただし、vnBGColorもEmptyのとき黒になります。
          (規定値:Empty)
          VBScriptでは下記のように16進数で指定するとよいでしょう。
          &h000000&(黒)
          &hFF0000&(赤)
          &h00FF00&(緑)
          &h0000FF&(青)
          &hFFFFFF&(白)
        vnBGColor
          文字列の背景色。Emptyを指定すると透明になります。
          (規定値:Empty)
        sFontName
          文字列のフォント名。(規定値:"System")
        bBold
          太字にするか。(規定値:False)
        bItalic
          斜体にするか。(規定値:False)
        戻り値
          [なし]

        現在の画像に文字列を貼り付けます。

      void Swirl( long nX, long nY, double nDegrees, nRadius, int nBGColor = 0 )
        nX
          元画像内での、渦巻の中心の横位置。(pixel、必須)
        nY
          元画像内での、渦巻の中心の縦位置。(pixel、必須)
        nDegrees
          渦の回転角度。(度、必須)
        nRadius
          渦の半径。(pixel、必須)
        nBGColor
          渦巻で消える部分の色。(規定値:黒)
          VBScriptでは下記のように16進数で指定するとよいでしょう。
          &h000000&(黒)
          &hFF0000&(赤)
          &h00FF00&(緑)
          &h0000FF&(青)
          &hFFFFFF&(白)
        戻り値
          [なし]

        現在の画像に渦巻加工を行います。

更新履歴
  2008/09/10
    - Version: 1.0.0.0
  2008/09/16
    - Version: 1.1.0.0
  2010/04/02
    - Version: 1.1.1.0
    - x64対応
  2012/07/06
    - Version: 1.1.2.0
    - FreeImage 3.15.3 搭載
  2012/10/18
    - Version: 1.1.2.1
    - 依存しているライブラリのバージョンをより安全なものに変更
  2013/03/12
    - Version: 1.1.3.0
    - FreeImage 3.15.4 搭載
    - メタデータの消去に対応
  2013/04/04
    - Version: 1.1.4.0
    - 画像の変換後もICCプロファイルを保持するように改良
    - 特定の画像の変換時に強制終了する問題対処(FreeImage 3.15.4 にパッチを適用)
  2013/08/22
    - Version: 1.1.5.0
    - BOX変換によるリサイズに対応。
    - 回転変換に対応。
  2013/09/09
    - Version: 1.1.6.0
    - 正しくない画像データをResizeしたときに強制終了する問題対処
  2013/11/28
    - Version: 1.1.7.0
    - 特定のPNG画像の変換時に強制終了する問題対処。
    - Version: 1.1.8.1
    - 文字列の貼り付け(TextOut)に対応。
    - 渦巻加工(Swirl)に対応。
  2014/06/05
    - Version: 1.1.9.0
    - 特定のGIF画像を変換時、IStreamにSaveするときに強制終了する問題対処。
謝辞

  NmagemanCOMの制作にあたり以下のモノを包含させていただきました。
  各提供者の方々に厚く御礼申し上げます。

  FreeImage
    FreeImage Public License
    --------------------------------------------------------------------------------
    This software uses the FreeImage open source image library. See http://freeimage.sourceforge.net for details.
    FreeImage is used under the FIPL, version 1.0.