Активный проект Skija расположен по адресу HumbleUI/Skija.
Skia — это библиотека 2D-графики с открытым исходным кодом, которая предоставляет общие API-интерфейсы, работающие на различных аппаратных и программных платформах.
Skija — это высококачественные Java-привязки для Skia.
Потому что в Java нет мощной и современной 2D-графики — до сих пор!
Есть много случаев, когда вам может понадобиться графика:
Существующие предложения: Graphics2D от AWT, GraphicsContext от JavaFX. Они хороши, но не впечатляют.
Введите Скиа. Skia имеет успешный опыт реализации проектов промышленного масштаба, использующих ее для решения всех задач, связанных с графикой: Google Chrome, Android, Flutter, Firefox Canvas, Xamarin, LibreOffice. Skia превосходит все существующие наборы инструментов Java2D практически во всех тестах, а также обеспечивает:
Skija передает всю эту мощь кончикам ваших пальцев, так же просто, как добавить банку в путь к классам.
Автоматически генерируемые привязки для Skia существуют, но, похоже, не получили широкого распространения:
Цель проекта Skija — предоставить отличный API-интерфейс Java, который будет естественным в использовании. В частности:
Конечная цель Skija — почувствовать себя Java-библиотекой и вообще не думать о нативной части.
Compose for Desktop, набор инструментов декларативного пользовательского интерфейса для Kotlin:
Skija Graphics2D, реализация Java2D API:
Демонстрации Роберта Фелкера:
Видео Гарольда:
Демо-приложение Skija:
Публичная альфа. Все может измениться без предварительного уведомления.
Обратите внимание, что Skia, как известно, довольно часто меняет свой API (ежемесячно). Skija сделает все возможное, чтобы защититься от этих изменений, но иногда это может быть невозможно (например, метод был удален). Обычно это вспомогательные вещи, не волнуйтесь слишком сильно.
Платформы:
Серверные части:
API:
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 ▓▓▓▓▓▓▓▓░░
Использовать Skija так же просто, как добавить jar-файл.
Мавен:
< 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 >
Градл:
repositories {
maven {
url " https://packages.jetbrains.team/maven/p/skija/maven "
}
}
dependencies {
api " org.jetbrains.skija: ${ artifact } : ${ version } "
}
Замените ${artifact}
и ${version}
на:
Платформа | ${artifact} | ${version} |
---|---|---|
macOS Intel | skija-macos-x64 | |
macOS М1 | skija-macos-arm64 | |
Линукс | skija-linux | |
Окна | skija-windows |
Начните с прочтения «Начало работы».
Документация API находится в стадии разработки — ознакомьтесь с исходным кодом и комментариями JavaDoc.
Я нашел документацию SkiaSharp отличным источником информации о том, что можно сделать в Skia. У них также есть хорошие примеры и наглядные объяснения.
Если в Skija отсутствует документация для определенного метода или класса, вместо этого проверьте тот же класс в документации Skia. Возможно, мы еще не перенесли его на Java. Пиар приветствуется!
Наконец, демонстрационное приложение LWJGL содержит примеры большинства реализованных в настоящее время API.
Предварительные требования: Git, CMake, Ninja, JDK 9+, $JAVA_HOME, Python 3.
Проверить:
git clone https://github.com/JetBrains/skija.git
cd skija
./script/build.py
Чтобы разработать код:
security find-identity
export APPLE_CODESIGN_IDENTITY= " <...> "
./script/build.py
Информацию о сборке самой Skia см. на https://github.com/JetBrains/skia-build/.
Для примеров требуется локальная сборка Skija (см. Сборка Skija).
См. примеры/.
Вклады приветствуются!
Обязательно прочтите Соглашения о коде.
Помните: цель Skija — максимально точно отобразить Skia API.
Этим вещам есть место в Ские:
Это не так:
Всегда приветствуются полезные вещи, созданные на базе Skia/Skija — в виде библиотек.