こんにちわ山田です。
昨日は、オリオン座流星群がよく見えたそうですね。
まったく見れなかったです、、。
たまたま夕方のニュースで情報を得ていたので、楽しみにしていたら
朝になるまで思い出せませんでした。
そんなこんなで、画像を外部のサービス(API)を利用して
圧縮して、画像サイズを小さくするメソッドを作成したので、その覚書です。
開発環境 ASP.NET
開発言語 C#
使用したのは、TinyPNGでほぼ公式のリファレンス通りに実装しました。
画像→byte配列にするのが苦戦しました。ここを参考にさせていただきました。
呼び出し元
protected void ButtonUpload_Click(object sender, EventArgs e)
{
Label1.Text = "";
if(FileUpload1.HasFile)
{
string path = @"C:\temp\\";
//つけたいファイル名
string fileName = FileUpload1.PostedFile.FileName;
string output = Path.Combine (path, fileName);
//アップロードファイルを入力ストリーム経由でbyte配列に読み込む
Byte[] aryData = new Byte[FileUpload1.PostedFile.ContentLength];
FileUpload1.PostedFile.InputStream.Read(aryData, 0, FileUpload1.PostedFile.ContentLength);
output = SizeDownImage(aryData, output);
Label1.Text = "次のファイル名で保存しました: " + output;
}
呼び出される側
/// <summary>
/// アップされた画像をTinyJPGのAPIを使用して、圧縮して保存するメソッド
/// ・引数:
/// byte[] 画像のバイナリデータ
/// string 保存先のファイルパス
/// ・返り値:
/// string 保存後のファイルパス
/// ※失敗した場合は、空を返却
/// </summary>
/// <param name="_imageByte"></param>
/// <param name="_output"></param>
/// <returns></returns>
public static string SizeDownImage(Byte[] _imageByte, string _output)
{
string key = [外部APIキー];
string url = [外部APIのURL];
string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));
WebClient client = new WebClient();
client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);
string result = "";
try
{
//画像アップロード //
client.UploadData(url, _imageByte);
// 画像ダウンロード
client.DownloadFile(client.ResponseHeaders["Location"], _output);
result = _output;
}
catch (WebException ex)
{
log.Error(ex.Message);
}
finally
{
client.Dispose();
}
return result;
}
}
昨日は、オリオン座流星群がよく見えたそうですね。
まったく見れなかったです、、。
たまたま夕方のニュースで情報を得ていたので、楽しみにしていたら
朝になるまで思い出せませんでした。
そんなこんなで、画像を外部のサービス(API)を利用して
圧縮して、画像サイズを小さくするメソッドを作成したので、その覚書です。
開発環境 ASP.NET
開発言語 C#
使用したのは、TinyPNGでほぼ公式のリファレンス通りに実装しました。
画像→byte配列にするのが苦戦しました。ここを参考にさせていただきました。
呼び出し元
protected void ButtonUpload_Click(object sender, EventArgs e)
{
Label1.Text = "";
if(FileUpload1.HasFile)
{
string path = @"C:\temp\\";
//つけたいファイル名
string fileName = FileUpload1.PostedFile.FileName;
string output = Path.Combine (path, fileName);
//アップロードファイルを入力ストリーム経由でbyte配列に読み込む
Byte[] aryData = new Byte[FileUpload1.PostedFile.ContentLength];
FileUpload1.PostedFile.InputStream.Read(aryData, 0, FileUpload1.PostedFile.ContentLength);
output = SizeDownImage(aryData, output);
Label1.Text = "次のファイル名で保存しました: " + output;
}
呼び出される側
/// <summary>
/// アップされた画像をTinyJPGのAPIを使用して、圧縮して保存するメソッド
/// ・引数:
/// byte[] 画像のバイナリデータ
/// string 保存先のファイルパス
/// ・返り値:
/// string 保存後のファイルパス
/// ※失敗した場合は、空を返却
/// </summary>
/// <param name="_imageByte"></param>
/// <param name="_output"></param>
/// <returns></returns>
public static string SizeDownImage(Byte[] _imageByte, string _output)
{
string key = [外部APIキー];
string url = [外部APIのURL];
string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));
WebClient client = new WebClient();
client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);
string result = "";
try
{
//画像アップロード //
client.UploadData(url, _imageByte);
// 画像ダウンロード
client.DownloadFile(client.ResponseHeaders["Location"], _output);
result = _output;
}
catch (WebException ex)
{
log.Error(ex.Message);
}
finally
{
client.Dispose();
}
return result;
}
}