14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社VISIONARY JAPANAdvent Calendar 2024

Day 15

C#を使用してTIFFファイルをブラウザに表示する方法

Last updated at Posted at 2024-12-14

こんにちは、そうとです。
普段、C#を使用して業務システムの開発をしています。
今日はC#を使用したTIFFファイルをブラウザに表示させる方法について、解説していきます。

前説

TIFFファイル (Tagged Image File Format) は以下のような特徴を持っています。
・高解像度・非圧縮画像の保存可能。
・複数ページを1つのファイルに格納可能。

主にスキャンデータや医療画像などで利用されますが、モダンブラウザでは直接表示できません。そのため、TIFFをPNGやJPEGに変換してからブラウザで表示する必要があります。

必要な準備

使用する技術スタック

  • C#: TIFF画像を変換する処理を実施します。
  • ASP.NET Core: Web APIを構築し、クライアントとサーバー間の通信を管理します。
  • HTML + JavaScript: 画像を表示します。

必要なライブラリ
TIFF画像を取り扱うために以下のパッケージを使用します。

SixLabors.ImageSharp
軽量でモダンな画像処理ライブラリで、クロスプラットフォームに対応しています。
以下のコマンドでインストールできます。

dotnet add package SixLabors.ImageSharp

System.Drawing
.NET Framework互換性のために使用されるライブラリです。

このコードは .NET Core 3.1以降 または .NET 5以上 で動作します。それ以前のバージョンでは正常に動作しない場合があります。

手順

手順1: サーバー側でTIFFをWeb対応の形式(PNGやJPEG)に変換する
ブラウザはTIFF形式を直接表示できないため、サーバー側でPNG形式に変換します。これは、ImageSharpまたはSystem.Drawingを使用して実装します。

手順2: サーバーで変換された画像をブラウザに表示する
変換された画像をAPI経由でクライアントに送信し、HTMLとJavaScriptを使用して画像を表示します。

C#でTIFFをPNGに変換するサンプルコード

以下に、ImageSharpおよびSystem.Drawingを用いた実装例を示します。

ImageSharpを使用した例

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.Processing;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/tiff")]
public class TiffController : ControllerBase
{
    [HttpGet("convert")]
    public IActionResult ConvertTiffToPng()
    {
        // TIFFファイルのパスを指定
        string tiffPath = "path/to/your/file.tiff";

        try
        {
            // TIFF画像を読み込み
            using (var image = Image.Load(tiffPath))
            {
                using (var memoryStream = new MemoryStream())
                {
                    // PNG形式でメモリストリームに保存
                    image.Save(memoryStream, new PngEncoder());

                    // メモリストリームの内容をクライアントに返す
                    return File(memoryStream.ToArray(), "image/png");
                }
            }
        }
        catch (Exception ex)
        {
            // エラーメッセージを返す
            return BadRequest(new { message = "TIFFの変換に失敗しました", error = ex.Message });
        }
    }
}

System.Drawingを使用した例

using System.Drawing;
using System.Drawing.Imaging;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/tiff")]
public class TiffController : ControllerBase
{
    [HttpGet("convert")]
    public IActionResult ConvertTiffToPng()
    {
        // TIFFファイルのパスを指定
        string tiffPath = "path/to/your/file.tiff";

        try
        {
            // TIFF画像を読み込み
            using (Image tiffImage = Image.FromFile(tiffPath))
            using (MemoryStream memoryStream = new MemoryStream())
            {
                // PNG形式でメモリストリームに保存
                tiffImage.Save(memoryStream, ImageFormat.Png);

                // メモリストリームの内容をクライアントに返す
                return File(memoryStream.ToArray(), "image/png");
            }
        }
        catch (Exception ex)
        {
            // エラーメッセージを返す
            return BadRequest(new { message = "TIFFの変換に失敗しました", error = ex.Message });
        }
    }
}

HTMLとJavaScriptで画像を表示

サーバーから送信された画像を表示するためのHTMLとJavaScriptのコードを以下に示します。

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TIFF Viewer</title>
    <script src="app.js" defer></script>
</head>
<body>
    <h1>TIFF Viewer</h1>
    <!-- TIFF画像を表示するためのimg要素 -->
    <img id="tiffImage" alt="TIFF Image" style="max-width: 100%; height: auto;">
</body>
</html>

JavaScript

// DOMが完全に読み込まれた後に画像読み込み関数を実行
document.addEventListener('DOMContentLoaded', () => {
    loadTiffImage();
});

// サーバーからTIFF画像を取得し、PNG形式で表示する非同期関数
async function loadTiffImage() {
    try {
        // サーバーのエンドポイントから画像データを取得
        const response = await fetch('/api/tiff/convert');

        // 正常に取得できた場合
        if (response.ok) {
            // 取得したデータをBlob形式に変換
            const blob = await response.blob();

            // HTML内のimg要素を取得
            const imgElement = document.getElementById('tiffImage');

            // BlobデータをObject URLとして設定し、画像を表示
            imgElement.src = URL.createObjectURL(blob);
        } else {
            alert('画像の読み込みに失敗しました。');
        }
    } catch (error) {
        alert('エラーが発生しました。ネットワークを確認してください。');
        console.error('An error occurred:', error);
    }
}

まとめ

本記事では、C#を使ったTIFF画像の変換方法と、HTML/JavaScriptを使用した画像の表示方法を解説しました。
サーバー側でTIFFをWeb対応の形式に変換する方法は、ブラウザでのTIFF表示における実用的な解決策です。
システム要件に応じて、最適な方法を選択してください。

14
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?