トップへ(mam-mam.net/)

skia4delphiのインストールとWEBP画像変換 ~Delphiソースコード集

検索:

skia4delphiを使うwebp画像をbmpに変換したり、bmpをwebp画像に変換したり、SVG画像を扱ったり、PDFファイルを作成したりできます。

skia4delniのダウンロードとインストール

https://skia4delphi.org/
から「Download」ボタンをクリックします。

Skia4Delphi


Skia4Delphi_x.x.x_Setup.exe
をクリックしてダウンロードします。
Skia4Delphi


ダウンロードしたファイルを右クリックし、プロパティを左クリックします。
Skia4Delphi


「許可する」にチェックを入れて、「適用」ボタンを押し、「OK」ボタンを押します。
Skia4Delphi


ダウンロードしたファイルをダブルクリックしてインストールを開始します。
Skia4Delphi

sk4d.dllファイルについて

skia4delphiは、Delphiでコンパイルした実行ファイルと同じフォルダ内(もしくはパスの通ったフォルダ内)にsk4d.dllを配置する必要があります。
sk4d.dll(32Bit、64Bit)の場所はインストール先フォルダの以下パスにあります。
・・・\ドキュメント\Skia4Delphi\Binary\Shared\Win32\sk4d.dll
・・・\ドキュメント\Skia4Delphi\Binary\Shared\Win64\sk4d.dll

WEBPファイルをJPEGファイルに変換、JPEGファイルをWEBPファイルに変換する

Button1をクリックするとWEBPファイルをJPEGファイルに変換します。
Button2をクリックするとJPEGファイルをWEBPファイルに変換します。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  Skia, Skia.Vcl, Skia.API;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var sImg: ISkImage;
    strm:TMemoryStream;
begin
  //webpファイルをjpegファイルに変換
  strm:=TMemoryStream.Create;
  try
    sImg:=Skia.TSkImage.MakeFromEncodedFile('image.webp');
    //   EncodeToStream(ストリーム,画像フォーマット,圧縮品質)
    sImg.EncodeToStream(strm,Skia.TSkEncodedImageFormat.JPEG,80);
    strm.SaveToFile('image.jpg');
  finally
    strm.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var sImg: ISkImage;
    strm:TMemoryStream;
begin
  //jpegファイルをwebpファイルに変換
  strm:=TMemoryStream.Create;
  try
    sImg := Skia.TSkImage.MakeFromEncodedFile('image.jpg');
    //   EncodeToStream(ストリーム,画像フォーマット,圧縮品質)
    sImg.EncodeToStream(strm,Skia.TSkEncodedImageFormat.WEBP,80);
    strm.Position:=0;
    strm.SaveToFile('image.webp');
  finally
    strm.Free;
  end;

end;

end.

SVG画像を表示する

Button1をクリックするとSVG画像を表示します。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  Skia, Skia.Vcl, Skia.API;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var svg: TSkSvg;
begin
  svg:=TSksvg.Create(Self);
  svg.Parent:=Self;
  svg.Left:=400;
  svg.top:=0;
  svg.Width:=200;
  svg.Height:=200;
  svg.Svg.Source:=
  '<svg style="width:32px;" viewBox="0 0 64 64">'+
    '<path d="M40,4 L16,36 L32,36 L24,60 L48,28 L32,28 z"'+
      ' style="fill:#FF0;stroke:#222;stroke-width:4;'+
      'stroke-linecap:round;stroke-linejoin:round;" />'+
  '</svg>';
end;

end.
Skia4Delphi SVG

PDFファイルを作成する

Button1をクリックするとPDFファイルを作成します。
SKIAで文字列をPDFファイルに出力する場合、改行コード(#$0d#$0a)を入れても改行されずに四角形が表示されるだけなので注意。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  System.Types, system.UITypes,
  Skia, Skia.Vcl, Skia.API;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LCanvas: ISkCanvas;
  LDocument: ISkDocument;
  LDocumentStream: TStream;

  //LSVGDOM: ISkSVGDOM;
  sk:ISkImage;

  LSize: TSizeF;
  f:ISkFont;
  paint:ISKPaint;
  fs:TSkFontStyle;
begin
  //JPEG画像をPDFファイルに出力する場合
  sk:=TSkImage.MakeFromEncodedFile('image.jpg');

  //ポイント単位で指定する 1pt=1/72
  //ミリ単位の場合は A4 210mmx297mm
  LSize := TSizeF.Create(210*72/25.4, 297*72/25.4);

  LDocumentStream := TFileStream.Create('output.pdf', fmCreate);
  try
    LDocument := TSkDocument.MakePDF(LDocumentStream);
    try
      LCanvas := LDocument.BeginPage(LSize.Width, LSize.Height);
      try
        fs.Create(
          TSkFontWeight.ExtraBold,
          TSkFontWidth.UltraExpanded,
          TSkFontSlant.Upright
        );
        f:=TSkFont.Create(
          TSkTypeface.MakeFromName('MS Pゴシック',fs),
          24,//サイズ
          1, //横スケール 0.5:縦長 2:横倍角
          0  //skew
          );

        paint:=TSkPaint.Create;
        paint.AntiAlias:=true;
        paint.SetColorF(TAlphaColorF.Create(1,0,0,1));
        paint.Style:=TSkPaintStyle.Fill;

        LCanvas.DrawSimpleText('改行文字を入れても改行されずに',10,30,f,paint);
        LCanvas.DrawSimpleText('四角形'+#13#10+'が描画されるだけ',10,54,f,paint);

        //線だけの長方形を描画
        paint.SetColorF(TAlphaColorF.Create(0,0.5,0.5,1));
        paint.Style:=TSkPaintStyle.Stroke;
        LCanvas.DrawRect(Rect(10,120,100,200),paint);
        //JPEG画像をPDFファイルに出力する
        LCanvas.DrawImageRect(sk,RectF(10,220,110,300));

      finally
        LDocument.EndPage;
      end;
    finally
      LDocument.Close;
    end;
  finally
    LDocumentStream.Free;
  end;
end;
end.
Skia4Delphi PDF