2015年10月22日木曜日

タイニーPNG のAPIを利用した画像圧縮アプリケーションの作成

こんにちわ山田です。
昨日は、オリオン座流星群がよく見えたそうですね。
まったく見れなかったです、、。

たまたま夕方のニュースで情報を得ていたので、楽しみにしていたら
朝になるまで思い出せませんでした。

そんなこんなで、画像を外部のサービス(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;
    }
}

Related Posts:

  • JavaScriptを使って外部ファイルを読み込む方法こんにちわ、開発者のⅠです。 さて、前回から時間が空いてしまいましたが、GoogleMapに関わるお話の続きです。 前回は、Google Mapにマーカーを表示させる方法について紹介いたしましたが、今度はその応用として、マーカーのデータを外部ファイルから読み込む方法について紹介したいと思います。… Read More
  • viewstateの中身を見ようと思ったがうまくできないブログネタ こんにちは山田です。 postとgetの違いについて以前お話したのですが postで送信されるviewstateについて掘り下げたいと思います。 ■ViewStateとは ビューステートは、ページとコントロールの値をラウンド トリップ間で保持する方法です。 現在のページの状態と値を… Read More
  • ASP.NETでのURLリライトの流れ こんにちは山田です。 長年の疑問のURLリライトについてわかってきたので その覚書です。  開発環境:ASP.NET2.0 開発言語:C# IIS:6.1 ■URLリライトの別名 URLリライト=URL書き換え 日本語だとURL書き換えとなります。 ■そもそもURLリライトは必… Read More
  • C# ref修飾子とout修飾子とはこんにちは山田です。 メソッドに引数を参照渡しで渡す方法です。 メソッドの戻り値で完結することが多いのですが、 それ以外に、戻り値とは別に引数を返したい場合があります。 自分が使うシーンとしては、メソッドの戻り値でDBから取得したデータリストを取得して、 そのデータの個数の値を別個に取得したい… Read More
  • ページのリダイレクト方法 web.configページのリダイレクト方法 こんにちは山田です。 リダイレクトについてまとめました。(action type="Rewrite"でリライトも設定できます。) 開発環境:ASP.NET 使用言語:C# リダイレクトの書き方ですが いくつか方法があるようなのですが、 今回はWeb.configに記述… Read More

1 件のコメント: