如何在不使用内部相机裁剪的情况下裁剪图像

Posted

技术标签:

【中文标题】如何在不使用内部相机裁剪的情况下裁剪图像【英文标题】:How to crop an image without using internal camera cropping 【发布时间】:2016-09-06 04:15:38 【问题描述】:

我想在imageview 中显示一个裁剪后的图像,该图像显示为预览,在显示为预览后,现在我想再次裁剪它并在imageView 中显示它,但我不想制作使用内部摄像头裁剪,裁剪时我不想固定高度和宽度。

【问题讨论】:

请多解释一下你的问题我不清楚,如果可能的话用图表来详细说明你想要什么,也告诉我们你尝试了什么。 我认为你想裁剪图像而不是图像视图。 它只是我想裁剪图像但不使用内部相机裁剪。我想在我的应用程序中开发一个新的裁剪代码。对不起,我没有任何图表可以解释。这就是我能向你解释的全部内容。 【参考方案1】:

由于您没有提到任何具体要求,所以我将使用圆形图像裁剪示例来展示它的工作原理。所以图像就像在纸上绘制的图片,那么您需要在现实生活中更改图像吗?Canvas,Paint,Shapes 等。androidJava 中也有相同的内容。各种 API。

您可以使用bitmap,它是pixels 中的matrix,您可以在其上使用“Canvas”类进行绘画、裁剪、造型等。

步骤: 1. 从您的图像或可绘制等中获取位图 2. 使用Config.ARGB_8888 创建一个新的位图,意味着将 alpha,RGB 通道设置为新位图的 8 位大小以提高效率。 3. 为圆角造型创建一个新的BitmapShader。 4. 创建一个新的Paint,其中包含要绘制的样式和颜色信息。 5. 创建一个新的Canvas,它使用输入来处理绘制操作。 6. 使用Paint 和半径在Canvas 对象上调用“drawCircle”。 7.你完成了!现在您可以研究这些 API 以满足您的要求。

Bitmap bitmap = yourImageBitmap; // step 1
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); // step 2

BitmapShader shader = new BitmapShader (bitmap,  TileMode.CLAMP, TileMode.CLAMP);// step 3
Paint paint = new Paint(); // step 4
        paint.setShader(shader);
paint.setAntiAlias(true); // smooth picture
Canvas c = new Canvas(circleBitmap); // step 5 
c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); // step 6    

myImageView.setImageBitmap(circleBitmap);

【讨论】:

【参考方案2】:

我可能会使用 ImageMagick。

https://github.com/paulasiimwe/Android-ImageMagick

这是一个高质量、灵活的图像处理库。我没有在 Android 中使用过它,但从命令行和 C# 来看它非常简单。我相信MagickImage 类是您需要的主要类。

【讨论】:

以上是关于如何在不使用内部相机裁剪的情况下裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python - 如何在不超过原始图像大小的情况下调整裁剪图像的大小以满足纵横比

如何在不保存原始图像的情况下保存图像 URL 的裁剪图像? (在 Rails 中使用 Paperclip 或其他插件)

如何在不更改 C#.Net 中的分辨率的情况下裁剪图像?

如何在不裁剪的情况下调整新图像对象的大小?

我想裁剪图像并输入在图像中查看。如何使用这种类型的裁剪从相机裁剪图像?

如何在 Android 相机上使用意图添加功能裁剪图像?