リード開発メモ

大阪のソフトウェア会社です。 技術的な事柄についてのメモとしてブログを始めます。

2013年04月

SVN 作業コピーをアップグレード

仕事で Visual Studio 2012 を使うことになり、インストールした。

ソース管理は Subversion を使っているが、それまで使っていた AnkhSVN 1.6 が Visual Studio 2012 に対応していなかったため、AnkhSVN 1.7 にバージョンアップした。同時に TortoiseSVN も 1.7 にバージョンアップした。

しかし、それまで使っていた作業フォルダが、TortoiseSVN 1.6 でチェックアウトしたものだったため、作業フォルダの形式が違ってそのままでは読み込めなかった。どうやら下位互換がないとのこと。

しばらくして、エクスプローラ上で右クリックすると「SVN 作業コピーをアップグレード」なる見たことにないメニューに気づく。ググってみたところ、TortoiseSVN 1.6 形式の作業フォルダを TortoiseSVN 1.7 形式にアップグレードできる、とのこと。

ところで AnkhSVN は「アンクエスブイエヌ」と読むのだろうか?

ASP.NET Response.Redirect で例外が発生する

ASP.NET で Response.Redirect を呼ぶと ThreadAbortException 例外が発生する。エラーメッセージは「式を評価できません。」であり、これでは何が悪いのかわからない。

どうも tyr-catch で囲んでいる場合に限って例外が発生する模様。

調べたところ、以下の情報があった。
http://support.microsoft.com/default.aspx?scid=kb;ja;312629

Response.Redirect の仕様らしい。
Response.Redirect の2引数のオーバーロードを使って、ふたつめの引数に false を指定せよ、とのこと。

Excel 2010 開くのが遅い

仕事でやりとりに使っている Excel ファイルが日に日に重くなってきた。

開こうとすると Excel 2010 のスプラッシュウィンドウが表示される。「開いています」と出ているが、進捗率は 20 ~ 30% で止まったまま。しばらくするとおもむろに 100% になり、ようやく中身が見られるような状況である。この間2、3分と思いきや。。。今日計ったら5分20秒だった。。。

今日、ようやく「条件付き書式」が原因と判明した。
ステータス列があり、ステータスに応じて背景色を変えるようになっていたようだ。

「条件付き書式」が設定されているセルは、[ホーム]-[編集]-[検索と選択]-[条件付き書式]から探すことができる。

また、「条件付き書式」自体の設定は、[ホーム]-[スタイル]-[条件付き書式]-[ルールの管理]で行う。

PHP カメラ画像の向きを ImageMagick で修正する

カメラ画像には Exif が埋め込まれており、向きの情報も持っている。
スマホなどで撮ったカメラ画像は、表示時にこの向きを考慮して表示するかどうかは、表示するアプリ次第となる。

Webの場合はブラウザを通してみることになるので、あらかじめこの向きを通常の向きに修正してから、サーバに保存しておきたい。以下は、画像を向きに応じて回転、および反転させ、Exif 内の向きの情報を上書きする。

$image = new Imagick($tmp_file_name);
$orientation = $image->getImageOrientation();
switch ($orientation) {
	case imagick::ORIENTATION_UNDEFINED:	// 0
		break;
	case imagick::ORIENTATION_TOPLEFT:		// 1	そのまま
		break;
	case imagick::ORIENTATION_TOPRIGHT:		// 2	左右の鏡像
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_BOTTOMRIGHT:	// 3	180度回転
		$image->rotateImage(new ImagickPixel(), 180);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_BOTTOMLEFT:	// 4	3+鏡像
		$image->rotateImage(new ImagickPixel(), 270);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_LEFTTOP:		// 5	6+鏡像
		$image->rotateImage(new ImagickPixel(), 90);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_RIGHTTOP:		// 6	右に90度回転
		$image->rotateImage(new ImagickPixel(), 90);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_RIGHTBOTTOM:	// 7	8+鏡像
		$image->rotateImage(new ImagickPixel(), 270);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_LEFTBOTTOM:	// 8	右に270度回転
		$image->rotateImage(new ImagickPixel(), 270);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
}

PHP ImageMagick のインストール

XAMPP環境の PHP に ImageMagick をインストールする手順。

1. ImageMagick をインストールする。

ImageMagick のサイトからインストーラをダウンロードし、インストールする。
http://www.imagemagick.org/script/binary-releases.php?ImageMagick=qa8kehgo3k4hu158g1p0u9sc51#windows

自分の環境は Windows XP なので、現時点での最新 ImageMagick-6.8.4-9-Q8-x86-dll.exe をダウンロードした。

どうもインストールするフォルダは、スペースを含まない必要があるようだ。
自分は、C:\ImageMagick-6.8.4-Q8 とした。

2. Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)のインストールする。

次のサイトからダウンロードできる。インストール後は、 Windows を再起動したほうがいいようだ。
http://www.microsoft.com/ja-jp/download/details.aspx?id=29

3. php 用のバイナリを入手する。

次のサイト(MIKKO'S BLOG)からphp 用のバイナリを入手する。
here の先から取得できる。
http://valokuva.org/?page_id=50
自分は imagick-php54-php53.tgz をダウンロードした。

解凍した dll を C:\pleiades\xampp\php\ext にコピーする。
自分の環境は php5.4 なので、のうち、php54 フォルダの php_imagick_ts.dll (Thread Safe 版)をコピーした。

4. php.ini を編集する。 C:\pleiades\xampp\php\php.ini に
  extension=php_imagick_ts.dll
を追加する。場所はどこでもいい。

5. テスト

以下のテストページで画像が表示されればOK。
<?php
$image = new Imagick('C:\\aaa\\bbb\\test.JPG');
$image->writeImage('C:\\aaa\\bbb\\test_2.JPG');
?>
<img src="test_2.jpg" />

4/17 追記。
しばらく、ImageMagick を ImageMagik と書いていた。ちなみに魔法は Magic。スペルに注意。

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

livedoor 天気