Coil:Android上基于Kotlin协程的超级图片加载库

news2024/11/27 8:42:34

Coil:Android上基于Kotlin协程的超级图片加载库

1. coil简介

在当今移动应用程序的世界中,图片加载是一个不可或缺的功能。为了让应用程序能够高效地加载和显示图片,开发人员需要依赖于强大的图片加载库。而今天,我将向大家介绍一款备受瞩目的安卓图片加载库——Coil。Coil不仅支持Kotlin协程,还具备快速、轻量、易用和现代的特性。

Coil是一款注重性能和用户体验的图片加载库。它以其出色的加载速度和优化策略而闻名。Coil利用了多项优化技术,包括内存和磁盘缓存、内存中的图像降采样、自动暂停/取消请求等,从而实现快速加载并提供流畅的用户体验。

Coil的设计理念之一是保持轻量高效。相较于其他知名的图片加载库,如Picasso、Glide和Fresco,Coil在APK大小方面表现出色。对于那些已经使用了OkHttp和协程的应用程序来说,Coil仅会增加约2000个方法,与Picasso相当,并且明显少于Glide和Fresco。这使得Coil成为在应用程序中使用的理想选择,不会增加过多的包体积。

Coil还引以为傲的是其简单易用的API。它充分利用了Kotlin语言的特性,提供了简洁、直观的API接口,减少了样板代码的编写。下面是一个使用Coil加载图片的示例代码:

// 在协程中加载图片
lifecycleScope.launch {
    val imageBitmap = Coil.load("https://example.com/image.jpg") {
        // 可选的参数
        crossfade(true)
        placeholder(R.drawable.placeholder)
        error(R.drawable.error)
    }.bitmap

    imageView.setImageBitmap(imageBitmap)
}

通过上述代码,可以看出使用Coil加载图片非常简单和直观。开发者只需指定图片的URL,并可以选择添加一些可选参数,如淡入淡出效果、占位图和错误图等。Coil会自动处理加载请求并将结果以位图的形式返回,方便开发者在应用程序中显示。

Coil的现代化特性也是其吸引人的一部分。作为一款Kotlin优先的库,Coil充分利用了Kotlin语言的强大功能,使API更加简洁和易用。此外,Coil采用了现代化的库,如协程、OkHttp、Okio和AndroidX Lifecycles,以保持与最新的安卓开发趋势和技术的兼容性。

Coil作为一款安卓上基于Kotlin协程的超级图片加载库,以其快速、轻量、易用和现代的特性脱颖而出。它通过多种优化策略实现快速加载,并在APK大小方面保持较小的影响。Coil的简洁API充分利用了Kotlin语言的特性,减少了开发者的工作量。同时,Coil还采用了现代化的技术,使其与最新的安卓开发趋势保持一致。如果你正在开发安卓应用程序并寻找一款强大且易用的图片加载库,那么不妨尝试一下Coil,它一定会让你的开发体验更加愉快并提供出色的用户体验。

2. 快速上手指南

Coil 是一款功能强大的图片加载库,以下是使用 Coil 快速上手的指南:

  1. 添加依赖:
    在 build.gradle 文件中添加以下依赖来下载 Coil:
implementation("io.coil-kt:coil:2.5.0")
  1. 加载图片:
    使用 ImageView 的扩展函数 load 来加载一张图片,可以根据需要传入不同类型的参数,例如:
// URL
imageView.load("https://example.com/image.jpg")

// Resource
imageView.load(R.drawable.image)

// File
imageView.load(File("/path/to/image.jpg"))

// 其他更多选项...
  1. 配置请求选项:
    通过 lambda 语法,可以轻松配置请求选项,例如设置淡入淡出效果、占位图或使用转换器等:
imageView.load("https://example.com/image.jpg") {
    crossfade(true)
    placeholder(R.drawable.image)
    transformations(CircleCropTransformation())
}
  1. Jetpack Compose:
    如果使用 Jetpack Compose,可以引入 Coil 的 Compose 扩展库,并使用 AsyncImage 组件加载图片:
implementation("io.coil-kt:coil-compose:2.5.0")

AsyncImage(
    model = "https://example.com/image.jpg",
    contentDescription = null,
)
  1. 图片加载器 ImageLoader:
    Coil 使用单例的 ImageLoader 来将 ImageRequest 加入队列,可以通过以下方式获取 ImageLoader 实例:
val imageLoader = context.imageLoader

或者,您也可以创建自己的 ImageLoader 实例进行依赖注入:

val imageLoader = ImageLoader(context)

如果您不需要 ImageLoader 作为单例,请使用 io.coil-kt:coil-base 替换 Gradle 依赖。

  1. 图片请求 ImageRequest:
    如果需要自定义 ImageRequest 的加载目标,可以通过以下方式将 ImageRequest 加入队列:
val request = ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .target { drawable ->
        // 处理结果
    }
    .build()
val disposable = imageLoader.enqueue(request)

如果需要命令式地执行图片加载,可以直接调用 execute(ImageRequest)

val request = ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .build()
val drawable = imageLoader.execute(request).drawable

请参考 Coil 的完整文档以获取更多信息。

注意:Coil 兼容 R8 混淆,无需额外添加混淆规则。如果需要混淆代码,可能需要添加对应的混淆规则,如 Coroutines 和 OkHttp。

3. 快速加载与优化

Coil是一款注重性能和用户体验的图片加载库,通过多项优化策略实现快速加载。下面将详细解释Coil如何通过内存和磁盘缓存、内存中的图像降采样以及自动暂停/取消请求等优化策略来提高应用程序的性能和用户体验。

内存和磁盘缓存:
Coil利用了内存和磁盘缓存来提高图片加载的速度和效率。它使用了LRU(最近最少使用)算法来管理内存缓存,将最常用的图像数据保存在内存中,避免了频繁的网络请求和IO操作。同时,Coil还支持磁盘缓存,将已经下载过的图像数据保存到本地存储介质中,下次再次加载相同的图像时可以直接从缓存中读取,减少了网络请求的次数和数据传输量。

内存中的图像降采样:
为了提高加载速度和节省内存消耗,Coil采用了内存中的图像降采样技术。当加载大尺寸的图像时,Coil会先对图像进行降采样处理,即减少图像的像素数量,从而降低图像的分辨率和内存占用。这种降采样技术可以在不影响图像质量的前提下,大幅度减少内存消耗和加载时间。

自动暂停/取消请求:
Coil还具备自动暂停和取消请求的功能,这对于提高用户体验和节省资源非常重要。当控件(如ImageView)不可见时,Coil会自动暂停相应的图片加载请求,避免不必要的网络请求和资源浪费。当控件再次可见时,Coil会自动恢复加载请求。此外,如果由于某些原因(如滚动过快)需要取消加载请求,Coil也提供了便捷的方法来手动取消请求,从而避免加载过多无用的图片。

通过以上优化策略,Coil能够实现快速加载并提供流畅的用户体验。内存和磁盘缓存减少了网络请求的次数,内存中的图像降采样减少了内存占用,而自动暂停/取消请求避免了不必要的加载。这些优化不仅提高了应用程序的性能,还减少了用户等待时间,从而提升了用户体验。

以下是一个使用Coil加载图片的示例代码,在加载图片时同时展示了Coil的优化特性:

// 在协程中加载图片
lifecycleScope.launch {
    val imageBitmap = Coil.load("https://example.com/image.jpg") {
        // 可选的参数
        crossfade(true)
        placeholder(R.drawable.placeholder)
        error(R.drawable.error)
    }.bitmap

    imageView.setImageBitmap(imageBitmap)
}

通过Coil的内置优化策略,开发者可以轻松地实现快速、高效的图片加载功能。同时,Coil的简洁API和现代化特性使得开发者可以更加便捷地集成和使用该库,为应用程序带来出色的用户体验。

Coil通过内存和磁盘缓存、内存中的图像降采样以及自动暂停/取消请求等优化策略,实现了快速加载和流畅的用户体验。内存和磁盘缓存减少了网络请求的次数,内存中的图像降采样减少了内存占用,而自动暂停/取消请求避免了不必要的加载。这些优化策略提高了应用程序的性能,减少了用户等待时间,从而提升了用户体验。如果你正在开发安卓应用程序并寻找一款高效且易用的图片加载库,不妨尝试一下Coil,它将为你的应用程序带来出色的图片加载效果。

4. 轻量高效

Coil 是一款轻量级的图片加载库,相比其他流行的图片加载库(如 Picasso、Glide 和 Fresco),它在 APK 大小方面具有明显的优势。以下将对 Coil 与其他图片加载库在 APK 大小上的差异进行对比,并举例说明 Coil 在不同类型应用程序中的适用性。

  1. 对比 Coil 与其他图片加载库的 APK 大小:
    • Picasso:Picasso 是另一款简单易用的图片加载库,但它的 APK 大小较大。这是因为 Picasso 内置了许多功能,如图片转换、裁剪和旋转等,导致库的体积增大。
    • Glide:Glide 是一个功能强大的图片加载库,它提供了许多高级功能,如 GIF 支持、缩略图生成和本地视频加载等。然而,这些额外的功能也导致了 Glide 的 APK 大小较大。
    • Fresco:Fresco 是 Facebook 开源的图片加载库,它专注于处理大型图像和动态图像。由于其内置了许多高级特性,包括渐进式加载、动画和 WebP 支持等,导致了较大的 APK 大小。

相比之下,Coil 注重于简单、高效的图片加载,避免了不必要的复杂功能,因此 APK 大小相对较小。这使得 Coil 成为一款非常适合对应用程序大小敏感的项目的图片加载库。

  1. Coil 在不同类型应用程序中的适用性举例:
    • 博客应用:对于博客类应用,通常需要加载不同尺寸的图片以提供良好的阅读体验。Coil 的内存中图像降采样技术可以快速加载并优化显示这些图片,同时通过内存和磁盘缓存减少网络请求,提高用户体验。
    • 社交媒体应用:社交媒体应用中图片数量众多,而且用户在浏览过程中会频繁地滚动和刷新页面。Coil 的自动暂停/取消请求功能可以根据视图的可见性自动暂停或取消加载请求,避免不必要的网络请求和资源浪费,提升滑动流畅性。
    • 电子商务应用:电子商务应用需要加载大量商品图片,并且需要在加载失败时显示占位图或错误图。Coil 可以通过简单的 API 设定占位图和错误图,方便地处理加载失败的情况,并且通过内存和磁盘缓存提高加载效率。

示例代码:

// 在博客应用中使用 Coil 加载图片
lifecycleScope.launch {
    val imageBitmap = Coil.load("https://example.com/image.jpg") {
        crossfade(true)
        placeholder(R.drawable.placeholder)
        error(R.drawable.error)
    }.bitmap

    imageView.setImageBitmap(imageBitmap)
}

// 在社交媒体应用中使用 Coil 加载图片
override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
    val post = posts[position]

    // 根据视图的可见性自动暂停/取消请求
    if (post.isVisible) {
        Coil.load(post.imageUrl)
            .placeholder(R.drawable.placeholder)
            .error(R.drawable.error)
            .into(holder.imageView)
    } else {
        Coil.imageLoader(context).clear(holder.imageView)
    }
}

// 在电子商务应用中使用 Coil 加载图片
Coil.load("https://example.com/product_image.jpg") {
    placeholder(R.drawable.placeholder)
    error(R.drawable.error)
    transformations(CircleCropTransformation())
}.into(imageView)

Coil 是一款轻量高效的图片加载库,在 APK 大小方面具有明显的优势。相比其他图片加载库,Coil 简化了功能,避免不必要的复杂特性,从而减小了 APK 的大小。无论是博客应用、社交媒体应用还是电子商务应用,Coil 都能根据不同类型的应用需求提供快速、高效的图片加载功能,并通过内存和磁盘缓存、自动暂停/取消请求等优化策略提升用户体验。如果您需要一个轻量级且易于集成的图片加载库,Coil 是一个值得考虑的选择。

5. 简单易用的 API

Coil 是一款利用 Kotlin 语言特性提供简洁、易用的图片加载库。它通过设计优雅的 API 接口,使开发者能够轻松地集成和使用该库,同时减少样板代码的编写。下面将探讨 Coil 如何通过其 API 接口提供便利性,并举例说明其如何减少冗余代码。

  1. 使用 Kotlin 的扩展函数和默认参数
    Kotlin 的扩展函数是一项强大的语言特性,可以向现有类添加新的函数,使 API 更简洁直观。Coil 利用这一特性,为 ImageView 类添加了 load 扩展函数,使得加载图片变得非常简单,只需在 ImageView 上调用 load 函数并传入图片 URL 即可。

示例代码:

imageView.load("https://example.com/image.jpg") {
    crossfade(true)
    placeholder(R.drawable.placeholder)
    error(R.drawable.error)
}

此外,Coil 还使用了默认参数,允许开发者只传递必要的参数,而省略可选参数。例如,在上述示例中,crossfadeplaceholdererror 都是可选参数,如果不需要设置,可以直接忽略它们。

  1. 支持多种加载源和转换器
    Coil 提供了丰富的 API 接口,支持从多种不同的源加载图片,包括网络、文件、ContentProvider、资源和 Uri 等。开发者只需根据自己的需求选择合适的加载源,并传递相应的参数即可实现图片加载。

另外,Coil 还支持图片转换器,如裁剪、旋转、圆角和灰度等。这些转换器可以通过链式调用的方式添加到加载过程中,以满足不同场景下的图片处理需求。

示例代码:

imageView.load("https://example.com/image.jpg") {
    transformations(CircleCropTransformation())
}
  1. 灵活的内存和磁盘缓存策略
    Coil 提供了灵活的内存和磁盘缓存策略,以提高图片加载的效率和性能。开发者可以根据具体的应用场景和需求,自定义缓存策略,包括内存缓存大小、磁盘缓存大小、缓存过期时间等。

示例代码:

val imageLoader = ImageLoader.Builder(context)
    .memoryCacheSize(50 * 1024 * 1024) // 设置内存缓存大小为 50MB
    .diskCacheSize(100 * 1024 * 1024) // 设置磁盘缓存大小为 100MB
    .build()

imageView.load("https://example.com/image.jpg") {
    memoryCachePolicy(CachePolicy.DISABLED) // 禁用内存缓存
    diskCachePolicy(CachePolicy.ENABLED) // 启用磁盘缓存
}

Coil 利用 Kotlin 语言的特性,提供了简洁、易用的 API 接口,使开发者能够轻松地集成和使用该库。通过扩展函数、默认参数和链式调用,Coil 简化了图片加载的代码编写过程,减少了冗余代码的出现。同时,Coil 还支持多种加载源和转换器,以及灵活的内存和磁盘缓存策略,满足了不同应用场景下的图片加载需求。如果您追求简单易用的图片加载库,并希望减少样板代码的编写,那么 Coil 是一个值得考虑的选择。

6. 现代化技术

Coil 是一款基于 Kotlin 语言开发的图片加载库。除了提供简单易用的 API 接口外,Coil 还强调了自己作为 Kotlin 优先和使用现代库的图片加载库的身份。这意味着 Coil 非常注重与最新的安卓开发趋势保持一致,并提供更好的性能和稳定性。

  1. Kotlin 优先
    Kotlin 是一种功能强大且易于学习的编程语言,它具有许多 Java 语言所不具备的特性。Coil 之所以选择 Kotlin 作为主要编程语言,是因为 Kotlin 具有更好的互操作性、更好的类型安全性、更少的样板代码和更好的可读性等优点。此外,Kotlin 还可以为 Coil 提供更好的 API 简化和扩展性。

示例代码:

val imageLoader = ImageLoader.Builder(context)
    .componentRegistry {
        add(SvgDecoder(context))
    }
    .build()

imageView.load("https://example.com/image.svg") {
    decoder(SvgDecoder(context))
}
  1. 使用现代库
    Coil 还利用了现代库,如协程、OkHttp、Okio 和 AndroidX Lifecycles 等,以提高性能和稳定性。例如,使用协程可以避免在主线程中执行耗时操作,而使用 OkHttp 和 Okio 可以提高网络请求的效率和稳定性。另外,使用 AndroidX Lifecycles 可以更好地管理图片加载过程中的生命周期,避免内存泄漏和资源浪费。

示例代码:

val imageLoader = ImageLoader.Builder(context)
    .componentRegistry {
        add(SvgDecoder(context))
    }
    .networkCachePolicy(CachePolicy.ENABLED)
    .okHttpClient {
        OkHttpClient.Builder()
            .cache(CoilUtils.createDefaultCache(context))
            .build()
    }
    .build()

imageView.load("https://example.com/image.jpg") {
    lifecycle(lifecycleOwner.lifecycle)
}

Coil 作为 Kotlin 优先和现代化技术使用的图片加载库,不仅具有简单易用的 API 接口,还可以与最新的安卓开发趋势保持一致,并提供更好的性能和稳定性。通过利用 Kotlin 的特性、协程、OkHttp、Okio 和 AndroidX Lifecycles 等现代化技术,Coil 可以更好地满足开发者的需求,并在复杂的应用场景下表现出色。如果您想要一个与时俱进、性能卓越的图片加载库,Coil 绝对是一个值得尝试的选择。

Coil 是一款基于 Kotlin 协程的图片加载库,它具有许多优点和特性,可以加速开发速度、简化代码,并提供出色的用户体验。

7. 结论

  1. Kotlin 协程的使用
    Coil 使用 Kotlin 协程来执行异步操作,这使得加载图片变得更加简单和高效。Coil 的协程支持可以让开发者在不阻塞主线程的情况下完成图片加载操作,从而提高用户体验。同时,Kotlin 协程本身还具有很好的可读性和可维护性,这也为 Coil 的开发者提供了更好的开发体验。

示例代码:

val imageLoader = ImageLoader(context)

lifecycleScope.launch {
    val drawable = imageLoader.loadDrawable("https://example.com/image.jpg")
    imageView.setImageDrawable(drawable)
}
  1. 简单易用的 API
    Coil 提供简单易用的 API 接口,使得开发者可以更快地集成 Coil 到他们的应用程序中,同时也可以简化代码。例如,开发者只需要一行代码就可以将图片加载到 ImageView 控件中。

示例代码:

imageView.load("https://example.com/image.jpg")
  1. 支持多种图片格式
    Coil 不仅可以加载常见的图片格式,如 PNG、JPG 和 GIF 等,还可以加载 WebP、SVG 和 HEIF 等先进格式。这使得开发者可以更好地适应不同的应用场景,并提供更好的用户体验。

  2. 可配置性高
    Coil 提供灵活的配置选项,使得开发者可以根据自己的需求进行定制。例如,开发者可以定义自己的图片解码器或缓存策略,以满足特定的业务需求。

  3. 出色的性能和稳定性
    Coil 利用现代化技术,如协程、OkHttp 和 AndroidX Lifecycles 等,以提高性能和稳定性。这使得 Coil 在复杂的应用场景下表现出色,同时也可以避免内存泄漏和资源浪费等问题。

总之,Coil 是一款基于 Kotlin 协程的图片加载库,它具有许多优点和特性,可以加速开发速度、简化代码,并提供出色的用户体验。通过使用 Kotlin 协程、简单易用的 API、支持多种图片格式、高度可配置性和出色的性能和稳定性等特性,Coil 可以帮助开发者更快地构建出优秀的安卓应用程序。因此,鼓励读者尝试使用 Coil 来优化他们的安卓应用程序,以获得更好的用户体验和开发效率。

8. 参考链接

Github仓库地址:https://github.com/coil-kt/coil
官方文档:https://coil-kt.github.io/coil/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SolidWorks 2023 使用操作流程

1. 把头 1.1. 新建零件 1.2. 新建草图 1.3. 拉升凸台 1.4. 等距实体 切换到锤头,新建草图,等距实体1mm 1.5. 拉升凸台 将上一个步骤的草图,进行特征拉升 1.6. 镜像处理 1.7. 圆角处理 1.8. 绘制凹槽 在锤子的侧面绘制草图 1.9. 挖出把手孔…

微信小程序课设(基于云开发)

微信小程序通过Laf云平台接入ChatGPT实现聊天&#xff0c;回答方式采用流式回答。 以下是图片展示其页面 回答次数通过卡密兑换 以下是对话页面的代码 <!--pages/content/content.wxml--><view class"container"><view class"div" hidde…

服务器使用过程中遇到常见故障及解决方案(包括蓝屏死机、无法删除的文件如何清理、网络卡、服务器连接不上等)

互联网时代&#xff0c;服务器的安全性和稳定性尤为重要&#xff0c;支撑着整个互联网行业的信息和数据安全。最近经常有客户咨询服务器的日常故障排除方法。由于服务器复杂的硬件结构和繁琐的运行原理&#xff0c;经常会出现这样那样的问题&#xff0c;有时即使是最小的问题也…

Redis -- set集合

挑战自己&#xff0c;每天进步一点点&#xff0c;成就将属于不停止脚步的你。 目录 Redis集合&#xff1f; 集合基本命令 sadd smembers sismember scard spop srandmember smove srem 集合间操作 sinter sinterstore sunion sdiff sdiifstore Redis集合&#…

Apple Vision Pro:新的隐私噩梦?

长期以来&#xff0c;苹果被誉为最注重隐私的科技公司之一&#xff0c;但如今&#xff0c;凭借售价 3499 美元的 Vision Pro&#xff0c;苹果可能已经打造出了一款终极监控机器。 作为苹果首款头戴式“空间计算”显示设备&#xff0c;号称将打造数字世界与物理世界交汇的新空间…

如何在本地部署chatGLM3

文章目录 1. 参考2. ChatGLM3 介绍3. 本地运行3.1 硬件配置3.2 下载ChatGLM3代码3.3 下载需要加载的模型3.4 运行大模型3.4.1 ChatGLM3目录介绍3.4.2 安装依赖3.4.2 综合demo演示3.4.3 启动对话模式工具模式代码解释器 4. 总结 前面一章节有讲到 基于MacBook Pro M1芯片运行ch…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItemGroup组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItemGroup组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItemGroup组件 该组件用来展示菜单MenuItem的分组。 子组件 无 接…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题&#xff0c;简简单单的列表&#xff0c;查询MongoDB数据库&#xff0c;测试环境不过几百上千条数据而已&#xff0c;请求耗时居然高达5~6秒&#xff1a; 作为对比&#xff0c;生产环境的请求响应截图如下&…

flask+vue+python跨区通勤人员健康体检预约管理系统

跨区通勤人员健康管理系统设计的目的是为用户提供体检项目等功能。 与其它应用程序相比&#xff0c;跨区通勤人员健康的设计主要面向于跨区通勤人员&#xff0c;旨在为管理员和用户提供一个跨区通勤人员健康管理系统。用户可以通过系统及时查看体检预约等。 跨区通勤人员健康管…

Leetcode834. 树中距离之和

Every day a Leetcode 题目来源&#xff1a;834. 树中距离之和 解法1&#xff1a;换根 DP 题解&#xff1a;【图解】一张图秒懂换根 DP&#xff01;&#xff08;Python/Java/C/Go/JS&#xff09; 暴力做法是&#xff0c;以点 i 为为树根&#xff0c;从 i 出发对树进行深度…

【MATLAB源码-第135期】基于matlab的变色龙群优化算法CSA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 变色龙群优化算法&#xff08;Chameleon Swarm Algorithm&#xff0c;CSA&#xff09;是一种新颖的群体智能优化算法&#xff0c;受到自然界中变色龙捕食和社交行为的启发。变色龙以其独特的适应能力而著称&#xff0c;能够根…

一分钟了解电脑关机快捷键是什么!

在日常使用电脑的过程中&#xff0c;了解一些基本的快捷键是提高效率的关键之一。其中&#xff0c;电脑关机快捷键是一个方便且迅速的操作&#xff0c;使您可以在不用通过烦琐的菜单操作的情况下&#xff0c;快速关机电脑。在本文中&#xff0c;我们将探讨电脑关机快捷键是什么…

【vue3学习笔记】自定义hook;toRef与toRefs

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P156节 《自定义hook》笔记&#xff1a; 实现一个鼠标“打点”功能&#xff1a; 注意点&#xff1a; &#xff08;1&#xff09;组件卸载时需要接触window上的事件绑定&#xff0c;否则组件卸载后window上绑定的事件还在生…

R语言学习case10:ggplot基础画图Parallel Coordinate Plot 平行坐标图

step1: 导入ggplot2库文件 library(ggplot2)step2&#xff1a;带入自带的iris数据集 iris <- datasets::irisstep3&#xff1a;查看数据信息 dim(iris)维度为 [150,5] head(iris)查看数据前6行的信息 step4&#xff1a;利用ggplot工具包绘图 plot5 <- ggparcoord(…

mac如何实现升级node版本、切换node版本

一、 查看node所有版本&#xff08;前提:安装了nodejs&#xff09; npm view node versions二、安装指定node版本 sudo n 版本号三、检查目前安装了哪些版本的node&#xff0c;会出现已安装的node版本 n四、切换已安装的node版本 sudo n 版本号其他命令 1、sudo npm cache…

ChatGPT之制作短视频

引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程&#xff0c;在这其中 ChatGPT的作用主要是帮我们生成文案&#xff0c;剪映的功能就是根据文案自动生成视频&#xff0c;并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先&#xff0c;我们需要使用提示…

Open CASCADE学习|拉伸

目录 1、沿方向拉伸 2、沿路径拉伸 3、变形拉伸 1、沿方向拉伸 #include <Geom_CylindricalSurface.hxx> #include <gp_Ax3.hxx> #include <GeomAPI_Interpolate.hxx> #include <BRepAdaptor_Curve.hxx> #include <BRepBuilderAPI_MakeEdge.hxx&…

挖矿系列:细说Python、conda 和 pip 之间的关系

继续挖矿&#xff0c;挖金矿&#xff01; 1. Python、conda 和 pip Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具&#xff0c;它们各自有不同的作用&#xff0c;但相互之间存在密切的关系&#xff1a; Python&#xff1a;是一种解释型、面向对象的高级程序设…

Jenkins升级后,构建任务配置界面重复错位

最近我把公司的Jenkins服务升级到了最新版本&#xff0c;升级完成后&#xff0c;点了一下构建任务&#xff0c;发现能够构建成功&#xff0c;就以为顺利完成升级了&#xff0c;下班走了&#xff0c;结果第二天&#xff0c;进入构建任务配置界面发现&#xff0c;界面一团乱麻&am…

Django的web框架Django Rest_Framework精讲(四)

文章目录 1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理 Exceptions8.自动生成接口文档 大家好&#xff0c;我是景天&#xff0c;今天我们继续DRF的最后一讲&#xff0c;Django的web框架Django Rest_Framewor…