# zoomimage
**Repository Path**: android6/zoomimage
## Basic Information
- **Project Name**: zoomimage
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-01-09
- **Last Updated**: 2024-01-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ![logo_image] ZoomImage
![Platform][platform_image]
![Platform2][platform_image2]
[![API][min_api_image]][min_api_link]
[![License][license_image]][license_link]
[![version_icon]][version_link]
翻译:[English](README.md)
用于缩放图像的库,支持 Android View、Compose 以及 Compose
Multiplatform;支持双击缩放、单指或双指手势缩放、单指拖动、惯性滑动、定位、旋转、超大图子采样等功能。
https://github.com/panpf/zoomimage/assets/3250512/f067bed9-24e4-4ab8-a839-0731e155f4ef
## 特点
* `功能齐全`. 支持双击缩放、手势缩放、单指拖动、惯性滑动等基础功能
* `定位`. 支持定位到图片的任意位置并保持在屏幕中央
* `旋转`. 支持 0°, 90°, 180°, 270°, 360° 旋转图片
* `子采样`. 支持对超大图进行子采样显示,避免 OOM,碎片支持动画以及清晰度渐变
* `动态缩放比例`. 根据图片尺寸和容器尺寸自动计算出最合适的双击缩放比例
* `缩放阻尼`. 手动缩放超过最大或最小缩放比例后会有带阻尼感的橡皮筋效果
* `单指缩放`. 双击并按住屏幕上下滑动可缩放图像
* `滚动条`. 支持显示水平和垂直滚动条,明确当前滚动位置
* `阅读模式`. 阅读模式下显示长图时初始状态会自动充满屏幕,用户可立即开始阅读图片内容,省去用户双击放大的操作
* `Exif`. 支持读取 Exif Orientation 信息并自动旋转图片
* `图片加载器`. 提供对 sketch、coil、glide、picasso 等图片加载器的支持,也可以自定义支持更多图片加载器
* `Compose Multiplatform`. 支持 Compose Multiplatform,可在 Android、macOS、Windows、Linux 等平台使用
## Comparison of similar libraries/同类库对比
| Function/Library | ZoomImage | [Telephoto] | [PhotoView] | [Subsampling
ScaleImageView] |
|:----------------------|:---------:|:-----------:|:-----------:|:--------------------------------:|
| Compose | ✅ | ✅ | ❌ | ❌ |
| Compose Multiplatform | ✅ | ✅ | ❌ | ❌ |
| View | ✅ | ❌ | ✅ | ✅ |
| 旋转 | ✅ | ❌ | ✅ | ❌ |
| 定位 | ✅ | ❌ | ❌ | ✅ |
| 滚动条 | ✅ | ❌ | ❌ | ❌ |
| 阅读模式 | ✅ | ❌ | ❌ | ❌ |
| 子采样 | ✅ | ✅ | ❌ | ✅ |
| 子采样动画 | ✅ | ❌ | ❌ | ❌ |
| 单指缩放 | ✅ | ✅ | ✅ | ✅ |
| 动态缩放比例 | ✅ | ❌ | ❌ | ❌ |
| 集成图片加载器 | ✅ | ✅ | ❌ | ❌ |
| 丰富的交互接口 | ✅ | ❌ | ✅ | ✅ |
### 多平台支持
| 平台/功能 | 缩放 | 子采样 | 集成图片加载框架 |
|:--------|:--:|:---:|:--------:|
| Android | ✅ | ✅ | ✅ |
| Desktop | ✅ | ✅ | ❌ |
| iOS | 🚧 | 🚧 | 🚧 |
| Web | 🚧 | 🚧 | 🚧 |
## 导入
`已发布到 mavenCentral`
`${LAST_VERSION}`: [![Download][version_icon]][version_link] (不包含 'v')
### compose android
`根据你用的图片加载器选择`
```kotlin
// 提供适配了 Sketch 图片加载器的 SketchZoomAsyncImage 组件,用法简单(推荐使用)
implementation("io.github.panpf.zoomimage:zoomimage-compose-sketch:${LAST_VERSION}")
// 提供适配了 Coil 图片加载器的 CoilZoomAsyncImage 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-compose-coil:${LAST_VERSION}")
// 提供适配了 Glide 图片加载器的 GlideZoomAsyncImage 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-compose-glide:${LAST_VERSION}")
```
为什么没有 picasso 版本的 compose ZoomImage 组件?因为 Picasso 官方已经说明不会提供对 compose
的支持([原文在此](https://github.com/square/picasso/issues/2203#issuecomment-826444442))
### compose multiplatform
```kotlin
// 提供基础的 ZoomImage 组件,还需要做额外的工作以支持网络图片和子采样
implementation("io.github.panpf.zoomimage:zoomimage-compose:${LAST_VERSION}")
```
### view
`根据你用的图片加载器选择`
```kotlin
// 提供适配了 Sketch 图片加载器的 SketchZoomImageView 组件,用法简单(推荐使用)
implementation("io.github.panpf.zoomimage:zoomimage-view-sketch:${LAST_VERSION}")
// 提供适配了 Coil 图片加载器的 CoilZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-coil:${LAST_VERSION}")
// 提供适配了 Glide 图片加载器的 GlideZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-glide:${LAST_VERSION}")
// 提供适配了 Picasso 图片加载器的 PicassoZoomImageView 组件,用法简单
implementation("io.github.panpf.zoomimage:zoomimage-view-picasso:${LAST_VERSION}")
// 提供最基础的 ZoomImageView 组件,还需要做额外的工作以支持网络图片和子采样
implementation("io.github.panpf.zoomimage:zoomimage-view:${LAST_VERSION}")
```
### R8 / Proguard
ZoomImage 自己的混淆已经包含在了 aar 中,但你可能还需要为间接依赖的其它库添加混淆配置
## 快速上手
### compose android
下面以 `SketchZoomAsyncImage`
为例,其它组件以及详细用法请查看文档 [开始使用](docs/wiki/getstarted_zh.md)
```kotlin
SketchZoomAsyncImage(
imageUri = "http://sample.com/sample.jpg",
contentDescription = "view image",
modifier = Modifier.fillMaxSize(),
)
```
### compose multiplatform
```kotlin
val state: ZoomState by rememberZoomState()
LaunchedEffect(Unit) {
state.subsampling.setImageSource(ImageSource.fromResource("huge_image.jpeg"))
}
ZoomImage(
painter = painterResource("huge_image_thumbnail.jpeg"),
contentDescription = "view image",
modifier = Modifier.fillMaxSize(),
state = state,
)
```
### view
下面以 `SketchZoomImageView`
为例,其它组件以及详细用法请查看文档 [开始使用](docs/wiki/getstarted_zh.md)
```kotlin
val sketchZoomImageView = SketchZoomImageView(context)
sketchZoomImageView.displayImage("http://sample.com/sample.jpg")
```
## 文档
* [开始使用](docs/wiki/getstarted_zh.md)
* [Scale: 缩放、双击缩放、时长设置](docs/wiki/scale_zh.md)
* [Offset: 移动到指定位置](docs/wiki/offset_zh.md)
* [Locate: 定位到图片的任意位置并保持在屏幕中央](docs/wiki/locate_zh.md)
* [Rotate: 旋转图片](docs/wiki/rotate_zh.md)
* [Read Mode: 长图初始时充满屏幕,方便阅读](docs/wiki/readmode_zh.md)
* [Click: 接收点击事件](docs/wiki/click_zh.md)
* [Subsampling: 对超大图进行子采样显示,避免 OOM](docs/wiki/subsampling_zh.md)
* [Scroll Bar: 显示水平和垂直滚动条,明确当前滚动位置](docs/wiki/scrollbar_zh.md)
* [Log: 修改日志等级以及输出管道](docs/wiki/log_zh.md)
* [Compose Multiplatform: 在桌面平台使用](docs/wiki/multiplatform_zh.md)
## 示例
你可以在 [sample-android](sample-android/src/main/java/com/github/panpf/zoomimage/sample/ui/examples)
和 [sample-desktop](sample-desktop/src/jvmMain/kotlin)
模块中找到示例代码,也可以到 [release](https://github.com/panpf/zoomimage/releases) 页面下载
APK、MSI、DMG、DEB 包体验
## 更新日志
请查看 [CHANGELOG](CHANGELOG_zh.md) 文件
## 我的项目
以下是我的其它开源项目,感兴趣的可以了解一下:
* [sketch](https://github.com/panpf/sketch):Android 上的一个强大且全面的图片加载器,完全基于协程,还支持
GIF、视频缩略图以及 Compose
* [assembly-adapter](https://github.com/panpf/assembly-adapter):Android 上的一个为各种 Adapter 提供多类型
Item 实现的库。还顺带为 RecyclerView 提供了最强大的 divider。
* [sticky-item-decoration](https://github.com/panpf/stickyitemdecoration):RecyclerView 黏性 item 实现
## License
Apache 2.0. 有关详细信息,请参阅 [LICENSE](LICENSE.txt) 文件.
[logo_image]: docs/res/logo_mini.png
[platform_image]: https://img.shields.io/badge/Platform-Android-brightgreen.svg
[platform_image2]: https://img.shields.io/badge/Platform-ComposeMultiplatform-brightblue.svg
[license_image]: https://img.shields.io/badge/License-Apache%202-blue.svg
[license_link]: https://www.apache.org/licenses/LICENSE-2.0
[version_icon]: https://img.shields.io/maven-central/v/io.github.panpf.zoomimage/zoomimage-compose
[version_link]: https://repo1.maven.org/maven2/io/github/panpf/zoomimage/
[min_api_image]: https://img.shields.io/badge/AndroidAPI-16%2B-orange.svg
[min_api_link]: https://android-arsenal.com/api?level=16
[Telephoto]: https://github.com/saket/telephoto
[PhotoView]: https://github.com/Baseflow/PhotoView
[Subsampling
ScaleImageView]: https://github.com/davemorrissey/subsampling-scale-image-view