gpt4 book ai didi

macos - 在 Mac Safari 上不显示 PNG 格式的图像

转载 作者:行者123 更新时间:2023-12-01 12:21:51 33 4
gpt4 key购买 nike

对于某些 Mac 用户,我们网站上的图像不会显示在 Safari 中,他们报告说看不到图像或看到黑色图像。这是一个例子:

http://s3-eu-west-2.amazonaws.com/bp18.boxcleverpress.com/Boxclever_logo_chartreuse.png

我发现的是:

  • 图片在电脑上显示
  • 在某些 Mac 上显示图像(我有一台旧的还可以)
  • 图像在 iPhone 和 iPad 上显示
  • 图片为 PNG
  • 我用 pngtastic
  • 优化了图像
  • 将图像复制到 Mac 并使用 Adob​​e Photoshop 打开时,出现错误:文件格式模块无法解析文件
  • 当我尝试在 Windows 上的 Photoshop Elements 中打开 pngtastic 优化文件时,我也收到该错误
  • 当我尝试在 Windows 上的 Photoshop 中打开优化文件时,我收到错误 IDAT:不正确的数据检查

  • 我将用未优化的图像替换优化的图像,但我不确定这个问题是否与 pngtastic 或 Adob​​e 图像库或其他东西有关。

    最佳答案

    问题出在Zopfli.java ,包含在 pngtastic 中。

    它使用这个 Java 代码来计算 Adler-32 校验和:

    /**
    * Calculates the adler32 checksum of the data
    */
    private static int adler32(byte[] data) {
    int s1 = 1;
    int s2 = 1 >> 16;
    int i = 0;
    while (i < data.length) {
    int tick = Math.min(data.length, i + 1024);
    while (i < tick) {
    s1 += data[i++];
    s2 += s1;
    }
    s1 %= 65521;
    s2 %= 65521;
    }

    return (s2 << 16) | s1;
    }

    但是, byte Java 中的 s 是 always signed ,因此它可能会为某些数据输入返回错误的校验和值。此外,裸 int s1 的声明和 s2造成进一步的并发症。

    使用(我的 C 版本)相同的代码和 data显式声明为 signed chars1s2signed int , 我得到一个错误的校验和 FFFF9180 – 正是您损坏的 PNG 中的那个。

    如果我将声明更改为使用 unsigned charunsigned int ,它返回正确的校验和 1BCD6EB2再次。

    original C code对于 zopfli 中的 Adler-32 校验和,使用 unsigned类型贯穿始终,因此受此影响的只是 Java 实现。

    关于macos - 在 Mac Safari 上不显示 PNG 格式的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526442/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com