PHP修正PNGピクチャDPI

1741 ワード

最近PHPを使用して画像を生成して印刷に使用しますが、ブラウザのデフォルト出力は72 DPIで、印刷要求は300 DPIで、直接印刷すると画像がぼやけてしまいます.
ネット上で1周探して、大部分のリンクはImageMagickを指して、しかし私のプロジェクトは新浪SAEに配置して、新浪SAEはそれを支持しません.探し続けてみると、「PHPがGDライブラリを使ってピクチャDPIを変更する」という文章が見つかり、JPGピクチャの解像度を変更する方法が提供され、親測定が可能になった.しかし、私のプロジェクトはPNG画像を使わなければなりません.透明な背景を使っているので、上の方法はまだだめですが、考え方を参考にすることができます.その後、別の文章「PHP:Dpi of a pngイメージ」を見つけた.この文章はPNGピクチャの解像度を取得する方法を提供したが、残念ながら著者は解像度を設定する方法を与えなかった.
最后に、仕方なく、自分で书いて、もがいてやっと成功しました.これは私が書いたテストの例です.
 
 0) {
	//  pHYs   
	$file = substr_replace($file, $phys, $pos - 4, 21);
} else {
	//IHDR    (PNG      8,IHDR     25)
	$pos = 33;
	// pHYs      IHDR  
	$file = substr_replace($file, $phys, $pos, 0);
}

header("Content-type: image/png");
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
echo $file;
?>

この文章は「兄弟姉妹の皆さん、phpはどうして300解像度の画像を生成することができますか.ありがとうございます」の答えにもなるはずです.
参考資料:
  • 《W3C PNG Specification》
  • 「pngファイルのデータ構造」
  • 《分析PNG画像ファイル構造(3)》
  • ネット検索の過程で役に立つ資料に出会ったので、ここに置いておきましょう.
  • 『JavaScript修正Canvasピクチャの解像度(DPI)』
  • 『PNG設定解像度』(Linux関数png_set_pHYsを使用)
  • 最後に一言、条件があればやはりImageMagickを使って、そんなに振り回す必要はありません!