Das aktive Skija-Projekt befindet sich unter HumbleUI/Skija
Skia ist eine Open-Source-2D-Grafikbibliothek, die gemeinsame APIs bereitstellt, die auf einer Vielzahl von Hardware- und Softwareplattformen funktionieren.
Skija ist eine hochwertige Java-Bindung für Skia.
Weil Java über keine leistungsstarke und moderne 2D-Grafik verfügt – immer noch!
Es gibt viele Gelegenheiten, bei denen Sie Grafiken benötigen:
Bestehende Angebote sind: Graphics2D von AWT, GraphicsContext von JavaFX. Sie sind gut, aber enttäuschend.
Betreten Sie Skia. Skia kann auf eine nachgewiesene Erfolgsbilanz bei Projekten im industriellen Maßstab zurückblicken, bei denen es in allen Bereichen der Grafik eingesetzt wird: Google Chrome, Android, Flutter, Firefox Canvas, Xamarin, LibreOffice. Skia übertrifft alle vorhandenen Java2D-Toolkits in fast jedem Benchmark und bietet außerdem:
Skija bringt all diese Leistung auf Ihre Fingerspitzen, so einfach wie das Hinzufügen eines Glases zu Classpath.
Es gibt automatisch generierte Bindungen für Skia, die jedoch offenbar keine große Akzeptanz finden:
Das Skija-Projekt hat das Ziel, eine großartige Java-native API bereitzustellen, die natürlich zu verwenden ist. Insbesondere:
Das ultimative Ziel für Skija ist es, sich wie eine Java-Bibliothek zu fühlen und überhaupt nicht über den nativen Teil nachdenken zu müssen.
Compose for Desktop, deklaratives UI-Toolkit für Kotlin:
Skija Graphics2D, eine Implementierung der Java2D-API:
Robert Felker-Demos:
Harold-Videos:
Skija-Demo-App:
Öffentliches Alpha. Dinge können sich ohne Vorankündigung ändern.
Bitte beachten Sie, dass Skia seine API bekanntermaßen häufig (monatlich) ändert. Skija wird sein Bestes tun, um Sie vor diesen Änderungen zu schützen, aber manchmal ist dies möglicherweise unmöglich (z. B. wurde die Methode entfernt). Normalerweise handelt es sich jedoch um Hilfsmittel, machen Sie sich keine allzu großen Sorgen.
Plattformen:
Backends:
APIs:
Bitmap ▓▓▓▓▓▓▓▓▓▓ Paint ▓▓▓▓▓▓▓▓▓▓
Canvas ▓▓▓▓▓▓▓▓░░ Path ▓▓▓▓▓▓▓▓▓▓
Codec ▓▓▓▓░░░░░░ PathEffects ▓▓▓▓▓▓▓▓▓▓
Color ▓░░░░░░░░░ PathMeasure ▓▓▓▓▓▓▓▓▓▓
ColorFilter ▓▓▓▓▓▓▓▓▓▓ PaintFilterCanvas ▓▓▓▓▓▓▓▓▓▓
ColorInfo ▓▓▓▓▓▓▓▓▓▓ Picture ▓▓▓▓▓▓▓▓▓░
ColorSpace ▓▓▓▓░░░░░░ PictureRecorder ▓▓▓▓▓▓▓▓▓▓
Data ▓▓▓▓▓▓▓▓▓░ PixelRef ▓▓▓▓▓▓▓▓▓▓
Drawable ▓▓▓▓▓▓▓▓░░ Pixmap ▓▓▓▓▓▓▓▓▓▓
Flattenable ░░░░░░░░░░ Region ▓▓▓▓▓▓▓▓▓▓
Font ▓▓▓▓▓▓▓▓▓▓ RuntimeEffect ▓▓▓▓▓░░░░░
FontData ░░░░░░░░░░ ScalerContext ░░░░░░░░░░
FontManager ▓▓▓▓▓▓▓▓▓░ Shader ▓▓▓▓▓▓▓▓▓▓
FontStyle ▓▓▓▓▓▓▓▓▓▓ ShadowUtils ▓▓▓▓▓▓▓▓▓▓
FontStyleSet ▓▓▓▓▓▓▓▓▓▓ Stream ░░░░░░░░░░
Image ▓▓░░░░░░░░ String ▓░░░░░░░░░
ImageFilters ▓▓▓▓▓▓▓▓▓▓ Surface ▓░░░░░░░░░
ImageInfo ▓▓▓▓▓▓▓▓▓▓ TextBlob ▓▓▓▓▓▓▓▓▓▓
MaskFilter ▓▓▓▓▓▓▓▓▓▓ TextBlobBuilder ▓▓▓▓▓▓▓▓▓▓
Matrix33 ▓▓▓░░░░░░░ Typeface ▓▓▓▓▓▓▓▓░░
Matrix44 ▓▓▓░░░░░░░ WStream ▓▓░░░░░░░░
Shaper: Paragraph:
BiDiRunIterator ▓▓▓▓▓▓▓▓▓▓ FontCollection ▓▓▓▓▓▓▓▓▓▓
FontMgrRunIterator ▓▓▓▓▓▓▓▓▓▓ LineMetrics ▓▓▓▓▓▓▓▓▓░
FontRunIterator ▓▓▓▓▓▓▓▓▓▓ Paragraph ▓▓▓▓▓▓▓▓▓▓
HbIcuScriptRunIter ▓▓▓▓▓▓▓▓▓▓ ParagraphCache ▓▓▓▓▓▓▓▓▓▓
IcuBidiRunIterator ▓▓▓▓▓▓▓▓▓▓ ParagraphStyle ▓▓▓▓▓▓▓▓▓▓
LanguageRunIterator ▓▓▓▓▓▓▓▓▓▓ ParagraphBuilder ▓▓▓▓▓▓▓▓▓▓
RunHandler ▓▓▓▓▓▓▓▓▓▓ TextStyle ▓▓▓▓▓▓▓▓▓▓
RunInfo ▓▓▓▓▓▓▓▓▓▓ TypefaceFontProvider ▓▓▓▓▓▓▓▓▓▓
ScriptRunIterator ▓▓▓▓▓▓▓▓▓▓
Shaper ▓▓▓▓▓▓▓▓▓▓
TextBlobBldRunHndlr ▓▓▓▓▓▓▓▓▓▓
SVG:
SVGDOM ▓▓▓▓▓▓▓▓░░
SVGCanvas ▓▓▓▓▓▓▓▓▓▓
SVGSVG ▓▓▓▓▓▓▓▓░░
Die Verwendung von Skija ist so einfach wie das Hinzufügen einer JAR-Datei.
Maven:
< repositories >
< repository >
< id >space-maven</ id >
< url >https://packages.jetbrains.team/maven/p/skija/maven</ url >
</ repository >
</ repositories >
< dependencies >
< dependency >
< groupId >org.jetbrains.skija</ groupId >
< artifactId >skija-${platform}</ artifactId >
< version >${version}</ version >
</ dependency >
</ dependencies >
Gradle:
repositories {
maven {
url " https://packages.jetbrains.team/maven/p/skija/maven "
}
}
dependencies {
api " org.jetbrains.skija: ${ artifact } : ${ version } "
}
Ersetzen Sie ${artifact}
und ${version}
durch:
Plattform | ${artifact} | ${version} |
---|---|---|
macOS Intel | skija-macos-x64 | |
macOS M1 | skija-macos-arm64 | |
Linux | skija-linux | |
Windows | skija-windows |
Beginnen Sie mit der Lektüre von „Erste Schritte“.
API-Dokumente befinden sich in der Entwicklung – siehe Quellcode und JavaDoc-Kommentare.
Ich empfand die SkiaSharp-Dokumentation als hervorragende Informationsquelle darüber, was in Skia alles möglich ist. Sie haben auch schöne Beispiele und visuelle Erklärungen.
Wenn Skija eine Dokumentation für eine bestimmte Methode oder Klasse fehlt, überprüfen Sie stattdessen dieselbe Klasse in der Skia-Dokumentation. Möglicherweise haben wir es noch nicht auf Java umgestellt. PRs sind willkommen!
Schließlich enthält die LWJGL-Demo-App Beispiele für die meisten derzeit implementierten APIs.
Voraussetzungen: Git, CMake, Ninja, JDK 9+, $JAVA_HOME, Python 3.
Kasse:
git clone https://github.com/JetBrains/skija.git
cd skija
./script/build.py
Zum Mitgestalten:
security find-identity
export APPLE_CODESIGN_IDENTITY= " <...> "
./script/build.py
Informationen zum Erstellen von Skia selbst finden Sie unter https://github.com/JetBrains/skia-build/
Beispiele erfordern einen lokalen Build von Skija (siehe Building Skija).
Siehe Beispiele/.
Beiträge sind willkommen!
Lesen Sie unbedingt die Codekonventionen.
Denken Sie daran: Das Ziel von Skija ist es, die Skia-API so genau wie möglich abzubilden.
Diese Dinge haben einen Platz in Skija:
Dies gilt nicht:
Nützliche Dinge, die auf Skia/Skija aufbauen, sind immer willkommen – als Bibliotheken.