Этот проект представляет собой адаптацию и портирование открытого проекта uCrop для платформы HarmonyOS. Исходный Android проект можно найти по меткам проекта и адресу GitHub (https://github.com/Yalantis/uCrop). Также статья о данном проекте была опубликована в сообществе и доступна по адресу (https://harmonyos.51cto.com/posts/3773).
(Если виртуальная машина не имеет библиотек изображений, могут возникнуть белые экраны. После конфигурации сертификата используйте реальное устройство.)
Скачайте компонент har uCrop.
Запустите DevEco Studio и импортируйте скачанный har-пакет в директорию "entry -> libs".
В файле build.gradle уровня модуля добавьте зависимость, добавив ссылку на HAR-пакет в директории libs и зависимости okhttp, затем выполните команду gradle-sync.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
implementation "com.squareup.okhttp3:okhttp:3.12.1"
...
}
// URI изображения с интернета
Uri uri_i = Uri.parse("https://gimg2.baidu.com/image_search/src=http%3A%2F%2F2e.zol-img.com.cn%2Fproduct%2F56%2F456%2Fce88hkGbFnV8Y.jpg&refer=http%3A%2F%2F2e.zol-img.com.cn&app=2002&size=f9999%2C10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1617791968&t=8e9676cb3c0536d46830d1090ad970f4");
// Локальный URI
String filename = "test.jpg";
PixelMap.InitializationOptions options = new PixelMap.InitializationOptions();
options.size = new Size(100, 100);
PixelMap pixelmap = PixelMap.create(options);
Uri uri_o = saveImage(filename, pixelmap);
Пример использования метода saveImage
можно найти в модуле entry.
UcropView uCropView = new UCropView(this);
try {
uCropView.getCropImageView().setImageUri(uri_i, uri_o);
uCropView.getOverlayView().setShowCropFrame(true);
uCropView.getOverlayView().setShowCropGrid(true);
uCropView.getOverlayView().setDimmedColor(Color.BLACK.getValue());
} catch (Exception e) {
e.printStackTrace();
}
```4. Добавьте кнопку для вырезания изображения. При нажатии на эту кнопку изображение будет вырезано и сохранено.
```java
// Кнопка вырезания
Button button = new Button(this);
button.setText("Вырезать");
button.setTextSize(100);
button.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
cropAndSaveImage();
component.setVisibility(Component.INVISIBLE);
}
});
protected void cropAndSaveImage() {
mGestureCropImageView = uCropView.getCropImageView();
mGestureCropImageView.cropAndSaveImage("image/jpeg", 90, null);
}
Запустите! Вы можете использовать жесты для изменения размера, перемещения и вырезания изображения. Вырезанное изображение будет сохранено в альбоме. Не беспокойтесь о проблемах, связанных с выходом рамки вырезания за границы изображения — компонент автоматически адаптируется к этим ситуациям.
(необязательно) Используйте упакованные интерфейсы для выполнения операций масштабирования, перемещения, поворота и вырезания изображения. Вы можете поместить эти операции в кнопках или ползунках для достижения соответствующих эффектов.
// Масштабирование
uCropView.getCropImageView().postScale(factor, centerX, centerY);
// Перемещение
uCropView.getCropImageView().postTranslate(distanceX, distanceY);
// Поворот
uCropView.getCropImageView().postRotate(degrees, centerX, centerY);
v0.1.0-alpha
Реализованы базовые возможности компонента
Поддержка жестов для поворота изображения отсутствует Отсутствуют анимационные эффекты — v0.2.0-alpha
Устранена проблема с несоответствием между «предварительным просмотром вырезки» и «фактическим вырезанным изображением» после вращения.
Теперь поддерживаются жесты для вращения изображений.
v0.3.0-alpha
Добавлена возможность чтения локальных файлов.
В примерах добавлен код для чтения локальной галереи фотографий.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )