9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ローコード開発ツールOutSystemsでNugetライブラリのAsposeApiを使って画像をグレースケールするページを作成してみた

Last updated at Posted at 2023-09-13

OutSystemsというローコードでWebサイトやモバイルアプリを開発することができるプラットフォームを触らせていただく機会がありました。
勉強していくとC#を使って機能拡張ができるということを知ったので、C#を使ってなにか実装してみることにしました。

実装してみたもの

今回は読み込んだ画像をグレースケーリングするというだけのシンプルなものを実装してみました。
C#を使う最大の利点は、Nugetライブラリを使えることにあるのかなと思ったので、AsposeApiというライブラリを使い、グレースケーリング機能を開発してみました。

環境

Service Studio 11.54.22
Integration Studio 11.14.20
Visual Studio 2022

ライブラリ

Aspose.Imaging

実装手順

Extensionを新規作成

Service Studioの任意のアプリで「choose module type」から「Extensions」を選択して、モジュールを作成します。
image001.png
Integration Studioが開かれるので、Actions配下に新規アクションを作成します。
image002.png
「Parameters」に引数と変数を設定します。
今回は、読み込んだ画像のBinaryDataを引数にして、グレースケーリングした画像のBinaryDataを変数に設定しました。
image003.png
リボンの一番右側にある「Edit Source Code .NET」をクリックします。
image004.png

Visual Studioで機能実装

Visual Studioが起動され、Extensionのプロジェクトが開かれます。
プロジェクトソリューションを右クリックし、「Nugetパッケージの管理」をクリックします。
「参照」タブを選択し、「Aspose.Imaging」をインストールします。
image005.png
TestExtension.csにプログラミングします。
書いたコードはシンプルで、BinaryDataを読み込んで、Asposeライブラリでグレースケールして、BinaryDataに変換して値を返します。
例外処理とかは今回は割愛しています。

TestExtension.cs
using System.Drawing;
using System.IO;
using Aspose.Imaging;

namespace OutSystems.NssTestExtension
{
    public class CssTestExtension: IssTestExtension {
		/// <summary>
		/// 
		/// </summary>
		/// <param name="ssInputBinaryData"></param>
		/// <param name="ssOutputBinaryData"></param>
		public void MssGenerateGrayScaleImage(byte[] ssInputBinaryData, out byte[] ssOutputBinaryData) {
            using (MemoryStream stream = new MemoryStream(ssInputBinaryData))
            {
                using (RasterCachedImage rasterCachedImage = (RasterCachedImage)Aspose.Imaging.Image.Load(stream))
                {
                    if (!rasterCachedImage.IsCached)
                    {
                        rasterCachedImage.CacheData();
                    }

                    rasterCachedImage.Grayscale();

                    ImageConverter imageConverter = new ImageConverter();
                    byte[] imageBytes = (byte[])imageConverter.ConvertTo(rasterCachedImage.ToBitmap(), typeof(byte[]));

                    ssOutputBinaryData = imageBytes;
                }
            }
            // TODO: Write implementation for action
        } // MssGenerateGrayScaleImage		
	} // CssTestExtension
} // OutSystems.NssTestExtension

Extensionをパブリッシュ

OutSystemsにパブリッシュします。
Integration Studioのリボンの「1-click publish」をクリックします。
エラーが出なければパブリッシュ成功。
image007.png

Service Studioで画面実装

Service Studioで作成したExtensionを読み込みます。
Service Studioのリボンの「Manage Dependencies...」(コンセントのようなアイコン)をクリックします。
image008.png
パブリッシュしたExtensionを選択して、アクションにチェックを入れて「Apply」をクリックします。
image009.png
Logicツリー配下にExtensionが追加されました。
image010.png
画面を実装します。
グレースケーリングするページを適当に作成していきます。
Emptyテンプレートのスクリーンを追加して、画面を読み込むための「upload」ウィジット、クリックイベント用の「button」ウィジット、画像表示用の「image」ウィジットをMainContentに放り込みました。
image011.png
画像のbinary dataを格納する「ImageData」と画像のファイル名を格納する「ImageName」を追加します。
image012.png
画面に追加したuploadウィジットの「file content」と「file name」にローカル変数を設定します。

ボタンを右クリックして「New Client Action」をクリックして、クリックアクションを作成します。

作成したアクションをダブルクリックすると、アクションのフローチャートの画面に切り替わります。

今回作成したExtensionのアクションをドラッグ&ドロップします。
Assignウィジットをドラッグ&ドロップしてExtensionの変数をローカル変数ImageDataに格納します。
image013.png
画面上の「1-Click Publish」をクリックしてパブリッシュします。
image014.png

画面をプレビュー

パブリッシュが成功すると、画面上部のボタンが「open in browser」に変わるのでこれをクリックします。
image015.png
ブラウザで作成したページが表示されます。

画像を読み込んでみると、読み込んだ画像が表示されました。
読み込み用の画像はこちらのフリー素材を使わせてもらいました。
image016.png
「GrayScale」ボタンをクリックしてみます、少し時間がかかりましたが無事グレースケールされました。
image017.png

9
3
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
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?