java - 如何在python中获取图像像素的RGBA颜色值

标签 java python

我正在尝试将此 java 代码转换为 python:

BufferedImage image;
FileInputStream fstream1 = new FileInputStream("image.png")
image = ImageIO.read(fstream1);
int max = -40000000; //Java rgb returns negative values

for (int i = 0; i < 128; i++)
{
    for (int j = 0; j < 255; j++)
    {
        color = image.getRGB(j, i); //returns integer
.....

我在 python 中尝试过:

from PIL import Image

image = Image.open("image.png").convert("RGBA")
pixels = image.load()

for i in range(128):
    for j in range(255):
        color = pixels[j, i] #returns (R, G, B, A);

问题是我在 python 中得到了不同的值。

为什么 java 返回负整数值以及如何在 python 中获得相同的结果?

最佳答案

此函数应将颜色从 Python 格式转换为 Java 格式:

def convertPixel(c):
    x = c[0] << 16 | c[1] << 8 | c[2] | c[3] << 24
    if x >= 1<<31:
        x -= 1<<32
    return x

请注意,Python 的格式非常合理 - 它直接为您提供准确的 R、G、B 和 A 值。这是 Java 的格式很奇怪。

由于整数溢出,您在 Java 中会得到负值 - 例如 0xFFFFFFFF(或 4294967295),它是纯白色,会环绕到 -1。

关于java - 如何在python中获取图像像素的RGBA颜色值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357889/

相关文章:

java - 如何在 Groovy 中模拟 String.equals?

python - 使用 Python 的 pysftp,如何验证主机 key ?

python - numpy的columnstack/hstack功能不一致

python - 在 python 中创建一个通用字典,从多对列表中获取键值对

java - BufferedWriter.write() 似乎不起作用

Java-Calculator 多计算

java - 甲骨文 JDBC 瘦 : enforce network encryption

java - Spring Boot、Thymeleaf 组合类验证

python - 当发送给它的查询太长时,uWSGI 似乎会中断

python - 为什么 numpy 混合基本/高级索引取决于切片邻接?