2011年10月30日日曜日

ImageMagick:画質や画像のトラブル

  • 確認すること
  1. Ghostscript、GSviewは正常にインストールできているか。
  2. 環境変数PATHにbinへのパスを追加したか。
  3. 匿名認証、ローカルセキュリティポリシー等、ウェブサーバの各種権限は設定したか。(詳細は別記事)

  • EPSをJPEGに変換したらウェブで表示されなくなった
EPSの色空間はCMYKだがIEはRGBしか対応していないため、convertの際にオプションでRGBに変換するよう指定する。
-colorspaceオプションでRGBを指定すると使い物にならない程画質が落ちるので、-typeの-TrueColorオプションがおすすめ。それか-ColorSeparation。

  • EPSをJPEGに変換したら画像の色が変わった
EPSの色空間はCMYK、ウェブ用のJPEGはRGBのためある程度の差異は生じる。-modulateオプションなどで細かく対応するのが一番無難・・・なのかな?

ImageMagick:日本語が変換されない

ImageMagickをインストールするとき、オプションの『Use Windows TrueType fonts for Chinese, Japanese and Korean』にチェックを入れたかどうか確認。
このチェックを入れることで、Ghostscriptはシステムフォントディレクトリから対応するTrueTypeフォントを検索し、自動で設定します。
またはフォントディレクトリに該当のフォントが入っているか確認します。

ImageMagickをPHPで使う

  • ImageMagickをPHPで使う
  • PHP Imagickライブラリの追加
    入手したphp_imagick_nts.dll をPHPの extension_dir に配置
    例:c:/program files/PHP/ext にコピーする


  • php.iniを編集
    extension=php_imagick_nts.dllと追記


  • コンピュータを再起動する
    ※ウェブサーバの再起動だけでは反映されない場合がある


  • phpinfoからimagickが追加されていることを確認


    • コーディングに際しての注意点
    ・画像ファイルへのパスは相対だとうまく動かない
    ・書き込み先フォルダにIIS の匿名ユーザの書き込み権限が必要
    サーバOSのバージョンによってユーザが違うため注意
    server 2003・・・IIS_WPGとRPP3007\IUSR_RPP3007(コンピュータ名)
    server 2008・・・IUSR と IIS_IUSRS

    2011年10月29日土曜日

    ImageMagick , Ghostscript+GSview インストール

    • ImageMagickのインストール

    • 入手したImageMagick-6.5.8-2-Q16-windows-dll.exe をクリックして実行

    「Select Additional Tasks」のオプションで

    1. Create a desktop icon
    2. Add application directory to your system path
    3. Install development headers and libraries for C and C++
    4. Install PerlMagick for ActiveState Perl v5.10.1 build 1006
    5. Install ImageMagickObject OLE Control for VBscript, Visual Basic, and WSH

    にチェックを入れる。
    ただし下の3つはC, Perl, OLE用なので、不要な場合はチェックを外す。
    インストールの途中で「pm/pl関連のファイルが見つからない」といった内容のエラーが出る場合があるが無視してかまわない。(perlモジュール)

    • Redistributable Packageのインストール

    入手したVisual C++ 2008 Redistributable Packageをインストール。
    サーバ、IIS、OSのバージョンによって2005をインストールする必要があるかもしれないので注意。

    • Ghostscript + GSviewのインストール
    ※インストール前の注意
    古いバージョンのGhostscript, GSviewがインストールされている場合、必ずアンインストールを行ってから新しいバージョンをインストールすること。
    • Ghostscriptのインストール
    入手したGhostscript日本語化キットのgs871w32full-gpl.zipを、c:\tmpなどフォルダ名がアルファベットのみのフォルダに移動し解凍
    以下より作業フォルダはC:\tmpと仮定する

    C:\tmpのsetupgs.exeを実行
    項目を確認し、
    1. Install to directory :  C:\gs
    2. Add shortcuts to :  Ghostscript
    3. Use Windows TrueType fonts for Chinese, Japanese and Korean
    を設定する。
    上2つはデフォルトのままで、最後の項目には必ずチェックを入れること。
    日本語を表示する際、自動でシステムフォントディレクトリからTrueTypeフォントを探すようになる。
    インストール終了後、エクスプローラを閉じる。
    • GSviewのインストール
    c:\tmp 内の gsv49w32.exeを実行
    インストール言語はEnglishにし、Associate PDF [.pdf] files with GSviewのチェックを外し、インストール
    ※Adobe readerを既にインストール済みの場合で、pdfを開くアプリケーションがデフォルトでGSviewになってしまうため
    • 環境変数の設定
    コントロールパネルのシステム -> 詳細シート(詳細設定) -> 環境変数でシステム環境変数 PATH への追加記述を行う。
    PATHにc:\gs\gs8.71\bin;c:\gs\gs8.71\libを追加
    ※バージョンはインストールしたGhostscriptによって変えること。

    参考ページ:http://auemath.aichi-edu.ac.jp/~khotta/ghost/install.txt 
    元URL:http://auemath.aichi-edu.ac.jp/~khotta/ghost/index.html

    ImageMagickを使うための準備

    • (自分の)動作環境

    OS : Windows Server 2003 R2 Standard Edition
    ウェブサーバ : IIS 6.0
    PHP : version 5.3.1

    OS : Windows Server 2008 Enterprise
    ウェブサーバ : IIS 7.0
    PHP : version 5.3.0

    • ImageMagickインストーラのダウンロード

    http://www.imagemagick.org/
    よりバイナリーパッケージのImageMagickをダウンロード。
    ページURL:http://www.imagemagick.org/www/binary-releases.html
    このページ下部の「Windows Binary Release」よりImageMagick-6.5.8-2-Q16-windows-dll.exeを入手
    ※バージョンはインストール当時のもの

    • Visual C++ 2008 Redistributable Packageのダウンロード

    バイナリーリリースページの下部にあるリンクからMicrosoftのウェブサイトに移動し、Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)をダウンロード

    • Ghostscript + GSviewのダウンロード

    http://auemath.aichi-edu.ac.jp/~khotta/ghost/index.html
    より日本語版のGhostscript + GSviewをダウンロード。
    ※WindowsではこれらをインストールしないとEPSファイルの変換が正常に機能しない。

    • PHP Imagickライブラリのダウンロード

    http://valokuva.org/magick/よりphp_imagick_nts.dllをダウンロード。
    ただしphpがthread safeならphp_imagick_ns.dllをダウンロードする。
    私の場合はNTS。

    ImageMagick 序文

    ImageMagickを組み込んだ業務アプリケーションの開発。

    ImageMagick とは、画像の操作・表示・フォーマット変換のためのソフトウェアスイート。
    GIF、JPEG、PNG、PDF、EPS、TIFFなど100種類以上の画像ファイルフォーマットに対応している。
    私の場合は主に以下の用途で使った。
    ・EPS、BMPデータをWeb用のJPEGに変換。特にEPS画像。
    ・画像のサムネイル作成(GIF, JPEG)
    ・その他画像の色加工

    実装はコマンドとPHPのライブラリの両方を使用した。
    コマンドはPHPのexec関数で呼び出している。

    出来ることも多いが苦労も多かった。
    単純な変換ならさほど迷わずに済むけれども、今回はeps→jpg変換が主で、その時ああだこうだと質を要求されまくったので面倒だった。

    せっかくなのでTIPSでもまとめます。

    2011年10月27日木曜日

    ActivePDFで文字が表示されない

    ActivePDFでPDFに変換した際に文字が表示されない。

    ACtivePDFにデフォルトで入ってない日本語フォント(しかもTTF型式)のフォントをプログラム内で指定していたため。
    C:\WINDOWS\FONTSから不足フォント(私の場合はMSgothic.TTF)をコピー。
    勝手にインストールしてくれる。

    よく考えてみれば当たり前のことでした。

    IISの画像キャッシュをオフにする

    IISの画像のキャッシュを無効にする

    画像フォルダのプロパティ
    →ヘッダ
    cache-control:no-cache
    pragma:no-cache
    expires:0

    を指定。

    apache httpd.confのチェック

    apachectl configtestでhttpd.confの文法が確認できる。

    formのページ遷移でGET値が欠落する

    formでページ遷移したときに?以降が欠落する
    →htmlのformタグ内に使ってもいないのにnamdとidを振っていたのが原因。

    2011年10月24日月曜日

    IISのセッションタイムアウト設定

    IISのセッションタイムアウトの設定

    ・アプリケーションのセッションタイムアウトを設定する
    1. 管理ツールから「インターネット インフォメーションサービス(IIS)マネージャ」を開く
    2. コンピュータ名→Webサイト→規定のWebサイト→(アプリケーション名)を右クリックし、プロパティを開く
    3. ASP.NETタブのEdit Configuration...をクリック
    4. State ManagementタブのSettion timoutの値を分単位で設定する
    5. OKをクリック
    6. OKをクリック

    ・IISのアイドルタイムアウトの設定をする
    1. 管理ツールから「インターネット インフォメーション サービス(IIS)マネージャ」を開く
    2. コンピュータ名→アプリケーション プールを右クリックし、プロパティを開く
    3. パフォーマンスタブのアイドル タイムアウトをセッションタイムアウトと同じ値に設定
    4. OKをクリック

    これで設定できます。

    Call to undefined function dl()

    PHP4のアプリケーションPHP5.3に移行していた際に躓いたこと。

    こういう感じで普通に拡張モジュールをプログラムでロード。
    今回はかの有名な全文検索モジュールnamazuだったわけですが。

    if ( ! extension_loaded('namazu')) {
            if ( ! dl('namazu.so')) {
                    abort( "なまずは泳げませんでした");
            }
     }
    

    いざ実行してみると、 Fatal error: Call to undefined function dl() in... とdlの部分でげに恐ろしきFatal errorになる。
    PHP公式マニュアルには『この関数は、PHP 5.3 以降でいくつかの SAPI からは削除されました。』とあるものの、普通のCGI版だし5.3.6だし動くはず・・・と小一時間悩む。
    だいたいいくつかのSAPIって何が該当するのかもわからない。
    configureも'--disable-debug'等余計なことはやってない。(enableでもなかったが)

    で、結局下記の方法で解決。

    • php.iniのenable_dlをOffからOnに
    enable_dl = On

    • dlで実際に呼んでいるモジュール(今回はnamazu.so)をphp.iniに追加
    extension=namazu.so
    ※extディレクトリにはnamazu.soをいれておくこと。
    php.iniでsoのフルパス指定でもおそらくOK。

    なんと通ったよ!!やったー!やったよーー!!
    ナマズが泳いだよー!!!

    それにしてもdlで呼んでいるものをいちいち指定しなければならないのだろうか。謎。

    2011年10月23日日曜日

    子ウィンドウを閉じながら親ウィンドウにsubmitする

    1. window.openで子を開くときに、親ウィンドウに名前をつけておく
    function window_naming(){
      window.name = "searchWin";
    }

    <a>タグの例:
    <a href="#" onClick="window_naming();window.open('child_page.php?');return false;">子ページ</a>

    2. 子ページでsubmitの際にターゲットを親に指定
    function form_submit(){
      document.forms[0].action = "parent_page.php"; /* submit先指定 */
      document.forms[0].target = "searchWin"; /* ターゲット(この場合親)指定 */
      window.close(); /* ウィンドウを閉じる */
      document.forms[0].submit(); /* 送信! */
    }
    

    vbのstrConv非対応文字列

    vbのstrConvはダブルクオーテーション、シングルクォーテーション、¥マークに非対応。

    ・strTarget = strTarget.Replace("\", "¥")
    ・strTarget = strTarget.Replace("'", "’")
    ・strTarget = strTarget.Replace("""", Chr(&H814A))

    で対応しました。

    正確には、「\」は「\」、 「"」は「"」、「'」は「'」になるだけなんですけどorz


    SQLServerとOLEDBの型

    ASP.NET&SQL ServerのアプリケーションをMSDEに移行したときのメモ。

    とある関数内で、DBから値を取得して、その型がintのときは別の処理にする、という分岐がうまく動かず悩む。

    【原因】
    SQLServerでは「int」だったのがOLEDBでは「DBTYPE_I4(オートナンバー)」になるから。

    危険な可能性のある Request.QueryString 値の対処法

    危険な可能性のある Request.QueryString 値がクライアント (em="...トの検証は、構成の <pages enableEventVa...") から検出されました。
    の対処法。


    ASP.NET上で自動的にユーザ入力値のエラーチェックをしているらしく(validateRequest)1.1のmachine.configにそれを一括設定する項目はありましたが、2.0にはありませんでした。
    (見落としているのでしょうか?)
    もしこれを実現しようとすれば、全てのaspxページの@Page ディレクティブにvalidateRequest="False"と記述するしかないかと思いきや、

    web.config の次の部分
    <pages>

    <pages enableEventValidation="true" validateRequest="false">
    とすることで解決。

    ※古いメモから起こしたので正確性には自信なしです。

    UACを無効にする

    1. スタートボタンから[コントロールパネル]を開く
    2. [コントロールパネル]のホームが表示された場合、左ペインで[クラシック表示]を選択する 
    3. [ユーザアカウント]アイコンをダブルクリックする 
    4. [ユーザーアカウント制御の有効化または無効化]を選択する 
    5. [ユーザーアカウント制御]ダイアログが表示されたら、[続行]ボタンをクリック(管理者アカウントの場合)
      または管理者アカウントのパスワードを入力して[OK]ボタンをクリック(標準アカウントの場合)する 
    6. [ユーザーアカウント制御 (UAC) を使ってコンピュータの保護に役立たせる]オプションのチェックを外し、[OK]ボタンをクリックする


    DSOFramerのエラー

    Windows VistaでDSOFramerがうまく動かないときに試してみること。

    • アンインストール→インストールをバッチで行う
    regsvr32 C:\dsoframer.ocx /u
    regsvr32 C:\dsoframer.ocx

    上記を記述したコマンドを実行のバッチファイルを作成し、これをエクスプローラ上で右クリックして「管理者として実行」を行うことでアンインストール・インストールすることが可能。
    このとき、dsoframer.ocx のパスはフルパスで指定しておくこと。
    • UACを切ってインストール
    UACを切って管理者権限でログインし、インストールする。可能であればインストール後にDSOFramerを実行する制限ユーザを作成する、または新しく制限ユーザを作成する。 
    • IEを「管理者として実行する」で起動し試す
    そのまんま。
    • Activeスクリプトの有効化
    IEの「インターネットオプション」内、「セキュリティ」タブ→「ローカル イントラネット」アイコンをクリックして、表示される「サイト」->「詳細設定」
    このセキュリティURLリストに、当該サイトのURLを追加
    • ユーザの追加
    コンピューターの管理 → ローカルユーザーとグループ → グループ → Administratorsのプロパティ → 該当ユーザーを追加してみる
    •  イベントビューアのログ
    ウィルスバスター等のセキュリティソフトで制限されていないか

    色々書きましたが、どれも決め手に欠けます。色々やってるうちに動いた記憶があります、
    というかDSOFramer自体あまり使いやすいものではないという説も。

    2011年10月16日日曜日

    sample

    aaaa

    function hogehoge{
      $R = opennmz(path);
      $n = nmzcount($R);
    }
    hogehoge;