Win10 に IIS と PHP – 3
どこかに設定があるのかもしれないが,
PHP でのエラーなどのログファイル.
場所は c:\Windows\Temp\ .
今回テストした PHP のコード
<?php $tempfile = $_FILES['fname']['tmp_name']; $filename = './data/' . $_FILES['fname']['name'] ; $up_status = false ; if (is_uploaded_file($tempfile)) { $up_status = move_uploaded_file($tempfile , $filename) ; } $link = "" ; if ($up_status) { $p_info = pathinfo($filename) ; $pi_ext = $p_info['extension'] ; $bmp_name = $filename . ".bmp" ; $to_bmp = FALSE ; if ($pi_ext == "png") { $img = imagecreatefrompng ($filename) ; $to_bmp = imagebmp($img,$bmp_name) ; } else if ($pi_ext == "jpg") { $img = imagecreatefromjpeg($filename) ; $to_bmp = imagebmp($img,$bmp_name) ; } else if ($pi_ext == "bmp") { $bmp_name = $filename ; $to_bmp = TRUE ; } if ($to_bmp) { $cmd_to = ("rsz_bmp.exe") . " " . $bmp_name ; exec ($cmd_to,$out,$ret) ; } if ($ret == 0) { $rsz_file = $out[count($out)-1] ; $bak_file = $filename . ".bak." . $pi_ext ; rename($filename,$bak_file) ; $rsz_name = pathinfo($rsz_file)['basename'] ; $file_rsz = $p_info['dirname'] . "/" . $rsz_name ; rename($rsz_file,$file_rsz) ; if ($pi_ext == "png") { $img_bmp = imagecreatefrombmp($file_rsz) ; imagepng ($img_bmp,$filename) ; } else if ($pi_ext == "jpg") { $img_bmp = imagecreatefrombmp($file_rsz) ; imagejpeg($img_bmp,$filename) ; } else if ($pi_ext == "bmp") { copy($file_rsz,$filename) ; } if (!file_exists($filename)) { $filename = $file_rsz ; } } if (file_exists($filename)) { $link .= "<hr/>" ; $link .= "<a href='" ; $link .= $filename ; $link .= "'>" ; $link .= $filename ; $link .= "</a>" ; $link .= "<br/>" ; $link .= "<img src='" ; $link .= $filename ; $link .= "'>" ; } } ?>
rsz_bmp.exe で画像ファイルを 2^n にリサイズし,その結果のファイル名を標準出力に出力する.
画像を出力する imagebmp などはあまり速くない.
同様の PHP を Synology NAS 上で.
https://itl.mydns.jp/…/tex_pow2.php
PHP のコードが悪いのか? Synology NAS では DIB から元の画像に戻すのがうまくいかない.
Win10 に IIS と PHP – 2
「IIS マネージャー」の「サイト」-「右クリック」で「Web サイトの追加…」.
手順は Win7 の時と同様.
「ディレクトリの参照」を「有効」に.
PHP で BMP を作成するコードを検索すると,imagebmp というのがあった.
ここにあったサンプルを /Test/php_gd/make_bmp.php として保存.
呼び出されると php.bmp が生成される.
以下の動作は Synology NAS を使用しています.
コードを一部修正して現在時刻の画像を作成しています.
上のブラウザの画像をクリックすると現在時刻の画像ファイルを更新します.
Windows API で DIB のリサイズ
プログラミング Windows 第5版(上)
第14章 ビットマップと BitBlt
14.4 GDI ビットマップオブジェクト
HelloBit.c より
i_DIB DIB_resize (const i_DIB& dib,const SIZE& new_s) { i_DIB rsz_dib ; RECT rect = { 0,0, new_s.cx , new_s.cy } ; { HDC hdc = ::GetDC(NULL) ; HDC hmem = ::CreateCompatibleDC(hdc) ; HBITMAP hbmp = ::CreateCompatibleBitmap(hdc,rect.right,rect.bottom) ; ::SelectObject(hmem,hbmp) ; ::ReleaseDC(NULL,hdc) ; ::StretchDIBits(hmem,rect,::Get_DIB_RECT(dib),dib) ; i_DIB rsz = ::ToDIB(hbmp) ; ::DeleteDC(hmem) ; ::DeleteObject(hbmp) ; rsz_dib = rsz ; } return rsz_dib ; }
Raspberry Pi に ImageMagick
以前調べた時に入っていた ImageMagick .
先日追加した SD の Pi 環境には入っていないのでインストール.
検索すると sudo apt install ImageMagick とある.が,入力すると,
pi@raspberrypi:~ $ sudo apt install ImageMagick
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
E: パッケージ ImageMagick が見つかりません
正しくは,
sudo apt install imagemagick
パッケージ名は小文字で指定する. imagemagick
Win10 に IIS と PHP のインストール
Win10 環境で PHP を動作させるためのインストールなどの手順
今回使用したのは Win10 LTSC .
通常版に比べて不要なものが入らないのでこれを選択.
以前 Win7 環境に PHP を入れた時の手順
IIS での PHP Web サイトの構成
IIS の有効化.CGI が必要.
IIS の動作の確認.
Web PI のインストール.
Web PI を起動して PHP をインストール.
何故かエラー?
PHP Managet for IIS は複数バージョンの PHP を切替えるツールの様で今回は無くても良いか?
php -v や php -r “phpinfo();” で確認すると動作はしている.
次の内容を php として保存し,ブラウザで開く. <?php phpinfo(); ?>
Fedora 環境で bmp が読めない
先日 GLUT でテクスチャ表示 の動作を確認していた時のこと.
Raspberry Pi ではうまく表示できることまで確認.
Fedora ではうまく読めない.
コードでテクスチャを生成しての表示ではうまくいく.
32 ビット色 BMP のコードは Synology NAS Web サーバなどでもそれなりに動作している.
32 bit exe ではうまく読み書きできているみたい.
Raspberry Pi (ARM) と Fedora (x64) で BITMAPFILEHEADER などを見ると 64 bit 環境でうまくない.
例えば bmih.biSize が x64 では 0x50 になっている(ARM では 0x28).
def_bmp.hxx が間違っているみたい.
どうも long の定義が Windows と Linux などでは異なるため.wiki 整数型
DWORD と LONG の定義を u_32 と i_32 に変更(u_32 ,i_32 は i_define.hxx で定義している).
//typedef unsigned long DWORD; typedef u_32 DWORD; //typedef long LONG; typedef i_32 LONG;
GLUT でテクスチャ表示
今度はテクスチャ.次の様なコードで面に貼り付け.
#include "glut_cg.hxx" #include "gonsprmt.hxx" #include "i_dib_f.hxx" i_DIB tex_01 ; int main(int argc, char* argv[]) { { tstring test_bmp = _T("./Tex01.bmp") ; // test_bmp = _T("/run/user/1000/gvfs/smb-share:server=ds116.local,share=web/i_Tools/Doc/blog/3D_Data/Tex01.bmp") ; #ifdef _MSC_VER test_bmp = _T("//DS116/web/i_Tools/Doc/blog/3D_Data/Tex01.bmp") ; #endif tex_01 = ::DIB_Load(test_bmp.c_str()) ; } { GonsA gnsa ; { Gons1 box = ::Gons_Box(Vd3(5,0,5)) ; box.SetColor(0xffffff) ; gnsa.push_back(box) ; } ::set_GonsA(gnsa) ; ::set_Extent(::GonsA_GetExtent(gnsa)) ; { C_glut* gm = ::get_c_glut() ; gm->BG = Vd4(0.9) ; gm->EP = Vd3(0,-10,0) ; } } ::glutInitWindowPosition(200,100) ; ::glutInitWindowSize (600,600) ; ::glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) ; ::glutInit (&argc,argv) ; ::glutCreateWindow (argv[0]) ; ::glutReshapeFunc (cv_resize) ; ::glutDisplayFunc (cg_display) ; ::glutKeyboardFunc (cv_keyboard) ; ::glutMouseFunc (cv_mouse) ; ::glutMotionFunc (cv_motion) ; ::cv_init () ; { ::glPixelStorei(GL_UNPACK_ALIGNMENT,1) ; ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,tex_01.GetWidth(),tex_01.GetHeight(),0,GL_RGB,GL_UNSIGNED_BYTE,tex_01.GetP_Bits()) ; ::glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST) ; ::glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST) ; ::glEnable(GL_TEXTURE_2D) ; } ::glutMainLoop () ; return 0 ; }
::glTexImage2D の指定と Tex01.bmp の形式が合っていないため
32 ビット色の画像なので ::glTexImage2D の GL_RGB を GL_RGBA に.
色の順番が違うので ::glTexImage2D を見ると GL_BGRA_EXT があったのでこれを指定.
GLUT でうまく表示されない?
以前作成した現在時刻を WebGL で表示するコードを GLUT を使用した方法に書き直し.
右側の面が正しく表示されていない.
見えない面を表示しない様に判断しているコードは次の様なもの.
{ Vd3 ev = eye ; Vd3 nv ; Vd3 pt ; for (size_t fvIndex=0 ; fvIndex<pia.size() ; fvIndex++) { long fVert = pia[fvIndex].x ; long nVert = pia[fvIndex].y ; Vd3 n1 = ::Vx_get(nrms,nVert) ; Vd3 p1 = ::Vx_get(pnts,fVert) ; nv = nv + n1 ; pt = p1 ; } ev = ev - pt ; nv = nv.Normalized() ; ev = ev.Normalized() ; double theta = ::deg(acos(nv.Dot(ev))) ; if (theta > 90) { continue ; } }
原因は,描画用に与えている視点で目標点が加算されていなかったため.
void draw(void) { GonsA* ga = get_GonsA() ; Vd3 eye = ::get_c_glut()->EP ; // eye+= ::get_c_glut()->TP ; ::GonsA_to_gl(*ga,eye) ; }
最終的にはこのあたり(C_glut)の見直しが必要.
OpenGL 線を表示すると途切れる?
線の配列から連続線に変更して OpenGL で表示すると途切れた表示になってしまった.
線分として表示していた時のコード
for (size_t lIndex=0 ; lIndex<lins.size() ; lIndex++) { Vl2 ln = lins[lIndex] ; Vd3 p0 = ::Vx_get(pnts,ln.x) ; Vd3 p1 = ::Vx_get(pnts,ln.y) ; ::glBegin(GL_LINES) ; { ::glVertex(p0....) ; ::glVertex(p1....) ; } ::glEnd() ; }
途切れてしまったコード
for (size_t lIndex=0 ; lIndex<lins.size() ; lIndex++) { v_long lin = lins[lIndex] ; ::glBegin(GL_LINES) ; // ::glBegin(GL_LINE_STRIP) ; for (size_t vIndex=0 ; vIndex<lin.size() ; vIndex++) { long ln = lin[vIndex] ; Vd3 pt = ::Vx_get(pnts,ln) ; ::glVertex(pt....) ; } ::glEnd() ; }
原因は glBegin の指定が GL_LINES のままだった.
GL_LINE_STRIP に修正して意図した表示になった.
OpenGL Programming Guide
Chapter 2 State Management and Drawing Geometric Objects
VS 2019 Raspberry Pi への接続で…
VS 2019 の「オプション」-「クロスプラットフォーム」-…-「リモートヘッダー…」の「更新」を選択すると,
エラーが発生しました。Could not connect to the remote system or the connection was lost。詳細については、C:\Users\Iwao\AppData\Local\Temp\vslinux_header_update_log.txt を参照してください。トラブルシューティングについては、https://aka.ms/AA23jat をご覧ください。
SSH コマンドで接続しようとするとやはり接続できない.IP では可能.
Microsoft Windows [Version 10.0.18362.418] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\Iwao>ssh -l pi raspberrypi ssh: Could not resolve hostname raspberrypi: \202\273\202\314\202\346\202\244\202\310\203z\203X\203g\202\315\225s\226\276\202\305\202\267\201B C:\Users\Iwao>ssh -l pi 192.168.1.36 pi@192.168.1.36's password: Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Nov 12 17:04:32 2019 SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password. pi@raspberrypi:~ $
FBX SDK 2020.0
FBX SDK のページを見たら新しい 2020.0 があった.
ダウンロードしてインストール.
構成マネージャで 2020.0 用の DebugK と ReleaseK を追加.
追加のインクルードディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\include;%(AdditionalIncludeDirectories)
追加のライブラリディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\lib\vs2017\x64\Release;%(AdditionalLibraryDirectories)
LibXml2 と ZLib をリンク するため,以前にコメントにしていた次の部分を有効に.
これでビルドはできるようになった.
動作確認はこれから.
Linux から NAS 上のアクセス
Linux から NAS 上のファイルを読み込むコード
Windows からであれば次の様な指定が可能.
tstring test_imo = _T(“//DS116/web/i_Tools/Doc/blog/3D_Data/Test_cube_line.imo”) ;
使用する関数や API によっては “\\” でないとうまくない場合もある.
tstring test_imo = _T(“\\\\DS116\\web\\i_Tools\\Doc\\blog\\3D_Data\\Test_cube_line.imo”) ;
Linux では mount すれば次の様な指定が可能なことは以前に調べている.
tstring test_imo = _T(“/mnt/ds116/web/i_Tools/Doc/blog/3D_Data/Test_cube_line.imo”) ;
今回は異なる方法で何か方法はないかと調べてみた.
結果としては「ファイルマネージャ」などでアクセスできる状態にする必要があるのであまり mount と変わらない.
調べたのは次の様な手順.
「端末」を開いて ls と入力.
そこに「ファイルマネージャ」からディレクトリをドロップ.
「端末」で「Enter」するとアクセスできることを確認.
tstring test_imo = _T(“/run/user/1000/gvfs/smb-share:server=ds116.local,share=web/i_Tools/Doc/blog/3D_Data/Test_cube_line.imo“) ;