FC2ブログ

★★★ GPSへの扉 ~FC2出張所~ ★★★

GPSがらみのお話を主につらつらと…

ここは GPSへの扉 のFC2出張所です。
GPS・サイクリング・お手製ソフトの話を中心につれづれなるままにつらつらと。。。
GPSへの扉 | PHPへの扉 | 淀川サイクリングへの扉| GPS関連リンク集|
トラックログからホームページを自動生成 trk2googlemaps|GPSへの扉 サポート掲示板

今週のGPS売れ筋ランキング

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

url2bmpを使ってwebのスクリーンキャプチャサーバを作る。その2

各種phpスクリプトを http://etgps.net/php においています。


url2bmpとphpを使って同様のサーバを作ってみました。の第二弾です。imagecopyresampledを使ってリサイズイメージを高画質化するとともにエラー系の強化を図ってみました。

これで、http://hogehoge.jp/w2p.php?bx=400&by=400&url=http://www.uneune.jp とかすると、pngのイメージが表示されます。



以下ソース
<?php
//
// GDライブラリの有効化と
// http://www.pixel-technology.com/freeware/url2bmp/ が必要です。
// Copyright 2007 ETOH Hiroki.(http://etgps.net/php/)
//
// Usage:
// http://hogehoge.jp/w2p.php?bx=400&by=400&url=http://www.uneune.jp
// bx=横幅(pixel数) by=縦幅(pixel数) url=キャプチャしたいurl
// 上記例ではwww.uneune.jpのurlを400x400のサイズでキャプチャします。
//
// 履歴
// ver.0.2 2007.09.24 imagecopyresampledを使ってリサイズ画像の画質を高画質化
// エラールーチンの強化
// ver.0.1 2007.09.17 初版
//

// 初期値(extractで書き換えられることを想定した変数)
$bx=256; // bxが指定されなかったときの初期値
$by=256; // byが指定されなかったときの初期値
$url="http://www.msn.com"; // urlが指定されなかったときの初期値

// コマンドライン展開(上記初期値はコマンドラインにあればオーバライト)
extract($_REQUEST, EXTR_OVERWRITE);

// 初期値その2(extractで書き換えられると困る変数)
$basex=1024; // webをキャプチャする元のサイズ
$basey=1024; //
$imgdir = dirname($_SERVER[PATH_TRANSLATED])."\\img\\"; // キャッシュ格納ディレクトリ
$exepath = "C:\\task\\url2bmp.exe"; // 実行ファイルパス

// 変なサイズが指定されたときははじく
if ($bx >1024 || $by >1024 || $bx<1 || $by<1)
{
errorpng("Argument bx or by is/are out of range.");
exit(0);
}

// ファイル名をハッシュ生成
$hashvalue = 'w2p_'.md5( $url.'bx'.$bx.'by'.$by ).'.png';
$output= $imgdir.$hashvalue;

// ファイルがなければ、url2bmpを使ってurlを生成。
if (!file_exists($output))
{
$tmp_output= $imgdir.$hashvalue.'.png';
$commandline = $exepath.' -url '.$url.' -file "'.$tmp_output.'" -format PNG -wx '.$basex.' -wy '.$basey.' -bx '.$basex.' -by '.$basey.' -wait 5 -removesb -notinteractive';
$last_line = system($commandline, $retval);
$tmp_img = imagecreatefrompng($tmp_output);
if (!$tmp_img)
{
errorpng("Failed to create webshot.");
}
$img = imagecreatetruecolor($bx, $by);
imagecopyresampled( $img, $tmp_img, 0, 0, 0, 0, $bx, $by, 1024, 1024 );
if (!$img)
{
errorpng("Failed to resizing.");
}
unlink($tmp_output);
imagedestroy($tmp_img);
}
else
{
$img = imagecreatefrompng($output);
if (!$img)
{
errorpng("Failed to reloading image.");
}
}
// GDを使ってリサイズ
//画像出力
if ($img)
{
header("Content-type: image/png");
header("Cache-control: no-cache");
imagepng($img);
imagepng($img, $output); // キャッシュ用にファイル出力しておく

//画像消去(メモリから)
imagedestroy($img);
}

// @brief エラー表示関数
//
//
function errorpng($str)
{
$img = imagecreatetruecolor(400, 30); /* 空の画像を作成 */
$bgc = imagecolorallocate($img, 255, 255, 255);
$tc = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, 400, 30, $bgc);
/* エラーメッセージを出力 */
imagestring($img, 3, 5, 5, $str, $tc);

header("Content-type: image/png");
header("Cache-control: no-cache");
imagepng($img);
exit(0);
}
?>


上記、url2bmpのweb siteならこんな感じで取ってこれます。





スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://zzzzzzzzzzzzz.blog91.fc2.com/tb.php/100-6d2aa27a
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。