node-canvasは、node.jsのカイロ支援キャンバス実装です。
ヒント
V3.0.0-RC2は、Linux(X64 GLIBC)、MacOS(X64)、およびWindows(X64)でのテストに利用できるようになりました。これは、N-APIとPreBuild-Installを使用した最初のバージョンです。試してみて、問題が発生した場合はお知らせください。
npm install canvas@next
$ npm install canvas
デフォルトでは、以下のプラットフォームのいずれかを使用している場合、事前に構築されたバイナリがダウンロードされます。
ソースからビルドする場合は、 npm install --build-from-source
を使用して、以下のコンパイルセクションを参照してください。
必要なnode.jsの最小バージョンは18.12.0です。
サポートされているOSまたはプロセッサアーキテクチャがない場合、または--build-from-source
使用している場合、モジュールはシステムにコンパイルされます。これには、カイロやパンゴなど、いくつかの依存関係が必要です。
詳細なインストール情報については、Wikiを参照してください。一般的なOSの1行のインストール手順は以下にあります。 libgif/giflib、librsvg、libjpegはオプションであり、それぞれGIF、SVG、およびJPEGサポートが必要な場合にのみ必要であることに注意してください。カイロv1.10.0以降が必要です。
OS | 指示 |
---|---|
macos | Homebrewの使用:brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman python-setuptools |
ubuntu | sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev |
フェドラ | sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel |
ソラリス | pkgin install cairo pango pkg-config xproto renderproto kbproto xextproto |
OpenBSD | doas pkg_add cairo pango png jpeg giflib |
Windows | wikiを参照してください |
その他 | wikiを参照してください |
Mac OS X V10.11+:最近Mac OS X v10.11+に更新し、コンパイル時にトラブルが発生している場合は、次のコマンドを実行してください: xcode-select --install
。 Stack Overflowの問題の詳細を読んでください。 Xcode 10.0以降がインストールされている場合、ソースからビルドするには、NPM 6.4.1以降が必要です。
const { createCanvas , loadImage } = require ( 'canvas' )
const canvas = createCanvas ( 200 , 200 )
const ctx = canvas . getContext ( '2d' )
// Write "Awesome!"
ctx . font = '30px Impact'
ctx . rotate ( 0.1 )
ctx . fillText ( 'Awesome!' , 50 , 100 )
// Draw line under text
var text = ctx . measureText ( 'Awesome!' )
ctx . strokeStyle = 'rgba(0,0,0,0.5)'
ctx . beginPath ( )
ctx . lineTo ( 50 , 102 )
ctx . lineTo ( 50 + text . width , 102 )
ctx . stroke ( )
// Draw cat with lime helmet
loadImage ( 'examples/images/lime-cat.jpg' ) . then ( ( image ) => {
ctx . drawImage ( image , 50 , 0 , 70 , 70 )
console . log ( '<img src="' + canvas . toDataURL ( ) + '" />' )
} )
1.xから2.xにアップグレードするためのガイドについては、Changelogを参照してください。
バージョン1.xドキュメントについては、V1.xブランチを参照してください。
このプロジェクトは、Web Canvas APIの実装であり、そのAPIを可能な限り密接に実装しています。 APIドキュメントについては、Mozilla Web Canvas APIにアクセスしてください。 (現在のAPIコンプライアンスについては、互換性のステータスを参照してください。)すべてのユーティリティメソッドと非標準APIを以下に文書化します。
createCanvas ( width : number , height : number , type ?: 'PDF' | 'SVG' ) = > Canvas
キャンバスインスタンスを作成します。この方法は、node.jsとWebブラウザの両方で機能し、Canvasコンストラクターがありません。 (ブラウザで実行される実装については、 browser.js
参照してください。)
const { createCanvas } = require ( 'canvas' )
const mycanvas = createCanvas ( 200 , 200 )
const myPDFcanvas = createCanvas ( 600 , 800 , 'pdf' ) // see "PDF Support" section
createImageData ( width : number , height : number ) = > ImageData createImageData ( data : Uint8ClampedArray , width : number , height ?: number ) = > ImageData // for alternative pixel formats: createImageData ( data : Uint16Array , width : number , height ?: number ) = > ImageData
Imagedataインスタンスを作成します。この方法は、node.jsとWebブラウザーの両方で機能します。
const { createImageData } = require ( 'canvas' )
const width = 20 , height = 20
const arraySize = width * height * 4
const mydata = createImageData ( new Uint8ClampedArray ( arraySize ) , width )
loadImage ( ) = > Promise < Image >
画像を読み込むための便利な方法。この方法は、node.jsとWebブラウザーの両方で機能します。
const { loadImage } = require ( 'canvas' )
const myimg = loadImage ( 'http://server.com/image.png' )
myimg . then ( ( ) => {
// do something with image
} ) . catch ( err => {
console . log ( 'oh no!' , err )
} )
// or with async/await:
const myimg = await loadImage ( 'http://server.com/image.png' )
// do something with image
registerFont ( path : string , { family : string , weight ?: string , style ?: string } ) = > void
システムフォントとしてインストールされていないフォントファイルを使用するには、 registerFont()
使用して、キャンバスにフォントを登録します。これは、キャンバスが作成される前に行う必要があります。
const { registerFont , createCanvas } = require ( 'canvas' )
registerFont ( 'comicsans.ttf' , { family : 'Comic Sans' } )
const canvas = createCanvas ( 500 , 500 )
const ctx = canvas . getContext ( '2d' )
ctx . font = '12px "Comic Sans"'
ctx . fillText ( 'Everyone hates this font :(' , 250 , 10 )
2番目の引数は、 @font-face
ルールで指定されているCSSプロパティに似たプロパティを持つオブジェクトです。少なくともfamily
指定する必要があります。 weight
とstyle
オプションであり、デフォルトは'normal'
になります。
deregisterAllFonts ( ) = > void
deregisterAllFonts
使用して、以前に登録されていたすべてのフォントの登録を解除します。この方法は、テストでキャンバスを使用するときなど、登録されているすべてのフォントを削除する場合に役立ちます
const { registerFont , createCanvas , deregisterAllFonts } = require ( 'canvas' )
describe ( 'text rendering' , ( ) => {
afterEach ( ( ) => {
deregisterAllFonts ( ) ;
} )
it ( 'should render text with Comic Sans' , ( ) => {
registerFont ( 'comicsans.ttf' , { family : 'Comic Sans' } )
const canvas = createCanvas ( 500 , 500 )
const ctx = canvas . getContext ( '2d' )
ctx . font = '12px "Comic Sans"'
ctx . fillText ( 'Everyone loves this font :)' , 250 , 10 )
// assertScreenshot()
} )
} )
img . src : string | Buffer
ブラウザと同様に、 img.src
data:
URIまたはリモートURL。さらに、Node-Canvasを使用すると、 src
ローカルファイルパスまたはBuffer
インスタンスに設定できます。
const { Image } = require ( 'canvas' )
// From a buffer:
fs . readFile ( 'images/squid.png' , ( err , squid ) => {
if ( err ) throw err
const img = new Image ( )
img . onload = ( ) => ctx . drawImage ( img , 0 , 0 )
img . onerror = err => { throw err }
img . src = squid
} )
// From a local file path:
const img = new Image ( )
img . onload = ( ) => ctx . drawImage ( img , 0 , 0 )
img . onerror = err => { throw err }
img . src = 'images/squid.png'
// From a remote URL:
img . src = 'http://picsum.photos/200/300'
// ... as above
// From a `data:` URI:
img . src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='
// ... as above
注:場合によっては、 img.src=
は現在同期です。ただし、 img.src=
ブラウザのように常に非同期にすることを意図しているため、常にimg.onload
とimg.onerror
を使用する必要があります。 #1007を参照してください。
img . dataMode : number
PDFキャンバスのみに描かれたJPEG画像に適用されます。
img.dataMode = Image.MODE_MIME
またはImage.MODE_MIME|Image.MODE_IMAGE
を設定して、画像のMIMEデータ追跡を有効にします。 MIMEデータが追跡されると、PDFキャンバスは、PNGに再エンコードするのではなく、JPEGを出力に直接埋め込むことができます。これにより、ファイルサイズを大幅に削減し、レンダリングをスピードアップできます。
const { Image , createCanvas } = require ( 'canvas' )
const canvas = createCanvas ( w , h , 'pdf' )
const img = new Image ( )
img . dataMode = Image . MODE_IMAGE // Only image data tracked
img . dataMode = Image . MODE_MIME // Only mime data tracked
img . dataMode = Image . MODE_MIME | Image . MODE_IMAGE // Both are tracked
非PDFキャンバスで作業する場合、画像データを追跡する必要があります。それ以外の場合、出力はジャンクになります。
MIMEデータトラッキングを有効にするには、PDFを生成しない限り、利点はありません(スローダウンのみ)。
canvas . toBuffer ( ( err : Error | null , result : Buffer ) => void , mimeType ?: string , config ?: any ) = > void canvas . toBuffer ( mimeType ?: string , config ?: any ) = > Buffer
キャンバスに含まれる画像を表すBuffer
オブジェクトを作成します。
raw
またはPDFまたはSVGキャンバスではサポートされていません。image/png
、 image/jpeg
(Node-CanvasがJPEGサポートで構築された場合)、 raw
(リトルエンディアン(ほとんどの)システムのBGRA注文の非エンエンコードデータ、Big-Endian SystemsのArgb; )、 application/pdf
(PDFキャンバス用)およびimage/svg+xml
(SVGキャンバス用)。画像キャンバスのimage/png
、またはPDFまたはSVGキャンバスの対応するタイプにデフォルトです。 image/jpeg
の場合、品質を指定するオブジェクト(0〜1)、プログレッシブ圧縮を使用する必要がある場合、および/またはクロマサブサンプリングを使用する必要がある場合: {quality: 0.75, progressive: false, chromaSubsampling: true}
。すべてのプロパティはオプションです。
image/png
の場合、ZLIB圧縮レベル(0〜9)、圧縮フィルター(S)、パレット(インデックス付きPNGSのみ)、バックグラウンドパレットインデックス(インデックス付きPNGSのみ)、および/または解像度( ppi): {compressionLevel: 6, filters: canvas.PNG_ALL_FILTERS, palette: undefined, backgroundIndex: 0, resolution: undefined}
。すべてのプロパティはオプションです。
PNG形式は解像度を1メートルあたりピクセル単位でエンコードするため、 96
指定すると、ファイルは3780 ppm(〜96.01 ppi)をエンコードします。解像度は、デフォルトでは一般的なブラウザの動作と一致するように未定義です。
application/pdf
の場合、オプションのドキュメントメタデータを指定するオブジェクト: {title: string, author: string, subject: string, keywords: string, creator: string, creationDate: Date, modDate: Date}
。すべてのプロパティはオプションであり、デフォルトはundefined
になりますが、現在の日付にデフォルトであるcreationDate
を除きます。メタデータを追加するには、カイロ1.16.0以降が必要です。
これらのプロパティの説明については、PDF 32000-1:2008の550ページを参照してください。
keywords
には標準セパレーターがないことに注意してください。他のアプリケーションでは一般的に使用されているため、スペースが推奨されます。カイロは、コンマまたはセミコロンが使用されている場合、引用符でキーワードのリストを囲みます。
返品値
コールバックが提供されていない場合、 Buffer
。コールバックが提供されている場合、なし。
// Default: buf contains a PNG-encoded image
const buf = canvas . toBuffer ( )
// PNG-encoded, zlib compression level 3 for faster compression but bigger files, no filtering
const buf2 = canvas . toBuffer ( 'image/png' , { compressionLevel : 3 , filters : canvas . PNG_FILTER_NONE } )
// JPEG-encoded, 50% quality
const buf3 = canvas . toBuffer ( 'image/jpeg' , { quality : 0.5 } )
// Asynchronous PNG
canvas . toBuffer ( ( err , buf ) => {
if ( err ) throw err // encoding failed
// buf is PNG-encoded image
} )
canvas . toBuffer ( ( err , buf ) => {
if ( err ) throw err // encoding failed
// buf is JPEG-encoded image at 95% quality
} , 'image/jpeg' , { quality : 0.95 } )
// BGRA pixel values, native-endian
const buf4 = canvas . toBuffer ( 'raw' )
const { stride , width } = canvas
// In memory, this is `canvas.height * canvas.stride` bytes long.
// The top row of pixels, in BGRA order on little-endian hardware,
// left-to-right, is:
const topPixelsBGRALeftToRight = buf4 . slice ( 0 , width * 4 )
// And the third row is:
const row3 = buf4 . slice ( 2 * stride , 2 * stride + width * 4 )
// SVG and PDF canvases
const myCanvas = createCanvas ( w , h , 'pdf' )
myCanvas . toBuffer ( ) // returns a buffer containing a PDF-encoded canvas
// With optional metadata:
myCanvas . toBuffer ( 'application/pdf' , {
title : 'my picture' ,
keywords : 'node.js demo cairo' ,
creationDate : new Date ( )
} )
canvas . createPNGStream ( config ?: any ) = > ReadableStream
PNGエンコードされたデータを発するReadableStream
を作成します。
config
: {compressionLevel: 6, filters: canvas.PNG_ALL_FILTERS, palette: undefined, backgroundIndex: 0, resolution: undefined}
。すべてのプロパティはオプションです。 const fs = require ( 'fs' )
const out = fs . createWriteStream ( __dirname + '/test.png' )
const stream = canvas . createPNGStream ( )
stream . pipe ( out )
out . on ( 'finish' , ( ) => console . log ( 'The PNG file was created.' ) )
pixelFormat: 'A8'
または'A1'
を提供するには、オプションオブジェクトを提供します。
const palette = new Uint8ClampedArray ( [
//r g b a
0 , 50 , 50 , 255 , // index 1
10 , 90 , 90 , 255 , // index 2
127 , 127 , 255 , 255
// ...
] )
canvas . createPNGStream ( {
palette : palette ,
backgroundIndex : 0 // optional, defaults to 0
} )
canvas . createJPEGStream ( config ?: any ) = > ReadableStream
JPEGエンコードされたデータを発するReadableStream
を作成します。
注:現時点では、 createJPEGStream()
はフードの下で同期しています。つまり、libuv threadpoolではなく、メインスレッドで実行されます。
config
(0〜1)、プログレッシブ圧縮を使用する必要がある場合、および/またはクロマサブサンプリングを使用する必要がある場合: {quality: 0.75, progressive: false, chromaSubsampling: true}
。すべてのプロパティはオプションです。 const fs = require ( 'fs' )
const out = fs . createWriteStream ( __dirname + '/test.jpeg' )
const stream = canvas . createJPEGStream ( )
stream . pipe ( out )
out . on ( 'finish' , ( ) => console . log ( 'The JPEG file was created.' ) )
// Disable 2x2 chromaSubsampling for deeper colors and use a higher quality
const stream = canvas . createJPEGStream ( {
quality : 0.95 ,
chromaSubsampling : false
} )
canvas . createPDFStream ( config ?: any ) = > ReadableStream
config
: {title: string, author: string, subject: string, keywords: string, creator: string, creationDate: Date, modDate: Date}
を設定します。詳細については、 toBuffer()
参照してください。メタデータを追加するには、カイロ1.16.0以降が必要です。 PDFキャンバスのみに適用されます。エンコードされたPDFを発するReadableStream
を作成します。 canvas.toBuffer()
もエンコードされたPDFを生成しますが、 createPDFStream()
使用してメモリの使用量を削減できます。
これは標準のAPIですが、いくつかの非標準呼び出しがサポートされています。サポートされている通話の完全なリストは次のとおりです。
dataUrl = canvas . toDataURL ( ) // defaults to PNG
dataUrl = canvas . toDataURL ( 'image/png' )
dataUrl = canvas . toDataURL ( 'image/jpeg' )
dataUrl = canvas . toDataURL ( 'image/jpeg' , quality ) // quality from 0 to 1
canvas . toDataURL ( ( err , png ) => { } ) // defaults to PNG
canvas . toDataURL ( 'image/png' , ( err , png ) => { } )
canvas . toDataURL ( 'image/jpeg' , ( err , jpeg ) => { } ) // sync JPEG is not supported
canvas . toDataURL ( 'image/jpeg' , { ... opts } , ( err , jpeg ) => { } ) // see Canvas#createJPEGStream for valid options
canvas . toDataURL ( 'image/jpeg' , quality , ( err , jpeg ) => { } ) // spec-following; quality from 0 to 1
context . patternQuality : 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
デフォルトは'good'
です。パターン(グラデーション、画像など)に影響を与えます。
context . quality : 'fast' | 'good' | 'best' | 'nearest' | 'bilinear'
デフォルトは'good'
です。 patternQuality
のように、ただし、単なるパターン以上のものに影響を与える変換に適用されます。
context . textDrawingMode : 'path' | 'glyph'
デフォルトは'path'
になります。効果はキャンバスタイプに依存します。
標準(画像) glyph
とpath
どちらもラスター化されたテキストになります。 Glyphモードはpath
よりも高速ですが、特に回転または翻訳された場合、より低品質のテキストになる場合があります。
PDF glyph
PDFへのパスの代わりにテキストを埋め込みます。これにより、エンコードが速く、PDF視聴者で開くのが速く、ファイルサイズが小さくなり、テキストを選択可能にします。グリフをレンダリングするために必要なフォントのサブセットは、PDFに埋め込まれます。これは通常、PDFキャンバスで使用するモードです。
SVG glyph
予想されるように<text>
要素を生成することはありません(Cairo Bug)。むしろ、 glyph
各グリフの<symbol>
を使用して<defs>
セクションを作成し、それらのグリフは<use>
要素を介して再利用されます。 path
モード各テキスト文字列の<path>
要素を作成します。 glyph
モードはより速く、ファイルサイズが小さくなります。
glyph
モードでは、 ctx.strokeText()
とctx.fillText()
は同じように動作します(それぞれストロークと塗りつぶしのスタイルを使用することは別として)。
このプロパティは、Canvas Stateの一部としてSave/Restoreの一部として追跡されます。
Canvas仕様によって定義されるすべての標準グローバルコンポジット操作に加えて、「飽和」操作も利用できます。
context . antialias : 'default' | 'none' | 'gray' | 'subpixel'
アンチエイリアシングモードを設定します。
Node-Canvasは、画像の代わりにPDFドキュメントを作成できます。次のようにキャンバスを作成するときは、キャンバスタイプを設定する必要があります。
const canvas = createCanvas ( 200 , 500 , 'pdf' )
次に、追加の方法.addPage()
を使用して、複数のページPDFを作成します。
// On first page
ctx . font = '22px Helvetica'
ctx . fillText ( 'Hello World' , 50 , 80 )
ctx . addPage ( )
// Now on second page
ctx . font = '22px Helvetica'
ctx . fillText ( 'Hello World 2' , 50 , 80 )
canvas . toBuffer ( ) // returns a PDF file
canvas . createPDFStream ( ) // returns a ReadableStream that emits a PDF
// With optional document metadata (requires Cairo 1.16.0):
canvas . toBuffer ( 'application/pdf' , {
title : 'my picture' ,
keywords : 'node.js demo cairo' ,
creationDate : new Date ( )
} )
また、 width
とheight
.addPage()
メソッドに渡すことにより、さまざまなサイズのページを作成することもできます。
ctx . font = '22px Helvetica'
ctx . fillText ( 'Hello World' , 50 , 80 )
ctx . addPage ( 400 , 800 )
ctx . fillText ( 'Hello World 2' , 50 , 80 )
参照:
Node-Canvasは、画像の代わりにSVGドキュメントを作成できます。次のようにキャンバスを作成するときは、キャンバスタイプを設定する必要があります。
const canvas = createCanvas ( 200 , 500 , 'svg' )
// Use the normal primitives.
fs . writeFileSync ( 'out.svg' , canvas . toBuffer ( ) )
Node-CanvasがインストールされているときにLibrsVGが利用可能である場合、ノードカンバスはSVG画像をキャンバスコンテキストにレンダリングできます。これは現在、SVG画像をラスター化することで機能します(つまり、SVG画像をSVGキャンバスに描画しても、SVGデータは保存されません)。
const img = new Image ( )
img . onload = ( ) => ctx . drawImage ( img , 0 , 0 )
img . onerror = err => { throw err }
img . src = './example.svg'
Node-Canvasには、Canvas Color Spaceの提案にほぼ従っている追加のピクセル形式の実験的サポートがあります。
const canvas = createCanvas ( 200 , 200 )
const ctx = canvas . getContext ( '2d' , { pixelFormat : 'A8' } )
デフォルトでは、キャンバスはRGBA32
形式で作成され、これはネイティブHTMLキャンバスの動作に対応します。各ピクセルは32ビットです。ピクセルデータ( getImageData
、 putImageData
)を含むJavaScript APIは、アルファ前翻訳なしで{赤、緑、青、アルファ}の色を順序に保存します。 (C ++ APIは、Alpha Premultiplicationを使用して、ネイティブエンディアンの注文で{Alpha、Red、Green、Blue}の順序で色を保存します。)
これらの追加のピクセル形式には、実験的なサポートがあります。
RGB24
RGBA32
のようですが、8つのアルファビットは常に不透明です。この形式は、 alpha
コンテキスト属性がfalse(すなわちcanvas.getContext('2d', {alpha: false})
)に設定されている場合に常に使用されます。この形式は、透明性を計算する必要がないため、 RGBA32
よりも高速になる可能性があります。A8
各ピクセルは8ビットです。この形式は、グレースケール画像の作成(各バイトをアルファ値として扱う)またはインデックス付きPNGSの作成(各バイトをパレットインデックスとして扱う)に使用できます( fillStyle
を使用したアルファ値を使用した例をimageData
してください。RGB16_565
各ピクセルは16ビットで、上部5ビットに赤、中央の6ビットで緑、下部5ビットで青、ネイティブプラットフォームのエンディアンネスが青で、青があります。一部のハードウェアデバイスとフレームバッファーは、この形式を使用しています。 PNGはこの形式をサポートしていないことに注意してください。 PNGを作成すると、画像は24ビットRGBに変換されます。したがって、この形式は、PNGを生成するための最適です。このモードのImageData
インスタンスUint8ClampedArray
の代わりにUint16Array
使用します。A1
各ピクセルは1ビットで、ピクセルは32ビット量に詰め込まれています。ビットの順序は、プラットフォームのエンディアンネスと一致します。リトルエンディアンマシンでは、最初のピクセルは最も重要なビットです。この形式は、単一色の画像の作成に使用できます。この形式のサポートは不完全です。以下の注意を参照してください。RGB30
各ピクセルは30ビット、上部10に赤、中央10の緑、下部10で青(カイロ1.12以降が必要です。)この形式のサポートは不完全です。以下の注を参照してください。メモと警告:
非デフォルト形式を使用すると、ピクセルデータが含まれるAPIの動作に影響を与える可能性があります。
context2d.createImageData
上記の説明に従って、基礎となる画像データ形式のピクセルあたりのビット数に依存します。context2d.getImageData
上記の説明に従って、返される配列の形式は、基礎となる画像モードに依存します。 node.jsのos.endianness()
関数を使用して決定できるプラットフォームのendiannessに注意してください。context2d.putImageData
上記のように。 A1
およびRGB30
まだgetImageData
またはputImageData
をサポートしていません。これらのフォーマットの操作に関するユースケースや意見がありますか?問題を開いて、お知らせください! (#935を参照してください。)
Shadow Blursを使用したA1
、 A8
、 RGB30
、 RGB16_565
は、クラッシュするか、適切にレンダリングできない場合があります。
ImageData(width, height)
およびImageData(Uint8ClampedArray, width)
コンストラクターは、ピクセルあたり4バイトを想定しています。ピクセルあたり異なる数のバイトを持つImageData
インスタンスを作成するには、 new ImageData(new Uint8ClampedArray(size), width, height)
またはnew ImageData(new Uint16ClampedArray(size), width, height)
を使用します。
まず、最新バージョンを作成してください。必要なすべてのdepsを取得します(上記のコンパイルを参照)、実行してください。
npm install --build-from-source
視覚テストの場合: npm run test-server
、ブラウザをhttp:// localhost:4000に向けます。
単体テストの場合: npm run test
。
ベンチマークはbenchmarks
ディレクトリに存在します。
examples
ディレクトリの例。ほとんどは同じ名前のPNG画像を作成し、 Live-Clock.jsなどの他の画像はブラウザで表示されるHTTPサーバーを起動します。
(MITライセンス)
Copyright(c)2010 LearnBoost、および貢献者<[email protected]>
Copyright(c)2014 Automattic、Incおよび貢献者<[email protected]>
このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得している人に、これにより許可が無料で許可されます。 、ソフトウェアのコピーを公開、配布、サブライセンス、および/または販売し、次の条件を条件として、ソフトウェアが提供される人を許可します。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的ないかなる種類の保証なしに「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたは使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。ソフトウェア。
ライセンスを参照してください