該問題似乎是由於我使用pngtastic優化的PNG中使用了zopfli壓縮。解決方法是使用不同的pngtastic壓縮選項,然後PNG在Photoshop中可讀。
使用不同的壓縮算法會導致較少的優化。
我不知道爲什麼zopfli壓縮是一個問題,它可能是我的代碼有錯誤(儘管只有zopli選項改變時,相同的代碼才能正常工作),在pngtastic或MacOS中Adobe不支持zopfli。
@ usr2564301已經做了一些調查,看來我的示例圖像中的壓縮數據的Adler-32校驗和不正確。 usr2564301也測試了pngtastic代碼,並發現它產生了正確的校驗和。問題可能在於我如何處理pngtastic中的字節流。
下面的代碼進行使用pngtastic(com.googlecode.pngtastic.core)的PNG優化
public static final String OPT_ZOPFLI = "zopfli";
public static final String OPT_DEFAULT = "default";
public static final String OPT_IMAGEOPTIM = "imageoptim";
private String optimization = OPT_ZOPFLI;
public void optimizePng(File infile, String out) {
final InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(infile));
final PngImage image = new PngImage(in);
// optimize
final PngOptimizer optimizer = new PngOptimizer();
optimizer.setCompressor(optimization, 1);
final PngImage optimizedImage = optimizer.optimize(image, false, 9);
// export the optimized image to a new file
final ByteArrayOutputStream optimizedBytes = new ByteArrayOutputStream();
optimizedImage.writeDataOutputStream(optimizedBytes);
optimizedImage.export(out, optimizedBytes.toByteArray());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
替換解決了問題嗎?我也收到來自Safari用戶的關於沒有看到PNG的投訴,但是這些都是在PHP(標準GD庫)中用'imagecreatetruecolor'創建的,而不是以任何方式進行「優化」。 –
@Marten - 是用未經優化的圖像取代允許它們被查看。我希望花一些時間來進一步研究這個問題,並且將我找到的報告回來。 –