1

ページが表示されたときに、アップロードされた PDF を JPEG に変換する必要があります。それらのほとんどは機能しますが、時々、一部の画像が表示されません。ほとんどの場合は機能するので、個々の PDF に関係があると思いますが、これらの不一致を含めるようにコーディングできるようにしたいと考えています。

以下はPHPコードです。

$print_jpegs = glob($pathinfo["dirname"] . "/print_jpegs/" . $pathinfo["filename"] . "-*.jpg");

            if (count($print_jpegs) <= 0) {
                if (!file_exists($pathinfo["dirname"] . "/print_jpegs/")) {
                    mkdir($pathinfo["dirname"] . "/print_jpegs/", 0777, true);
                }

                $pdf = new Imagick($packages[$j]);
                $pages = $pdf->getNumberImages();
                $pdf->destroy();

                if ($pages > 0) {
                    for ($k = 0; $k < $pages && $k <= 10; $k++) {
                        $print_jpeg = $pathinfo["dirname"] . "/print_jpegs/" . $pathinfo["filename"] . "-" . $k . ".jpg";

                        $im = new Imagick();
                        $im->setResolution(150, 150);
                        $im->readImage($packages[$j] . "[" . $k . "]");
                        $im->setImageColorspace(imagick::COLORSPACE_RGB);
                        $im->flattenImages();

                        $d = $im->getImageGeometry();

                        $max_w = 794;   // 210mm @ 96ppi (A4)
                        $max_h = 1123;  // 297mm @ 96ppi (A4)

                        $ratio = $d["width"] / $d["height"];

                        if ($max_w / $max_h > $ratio) {
                            $w = $max_h * $ratio;
                            $h = $max_h;
                        } else {
                            $w = $max_w;
                            $h = $max_w / $ratio;
                        }

                        $im->resizeImage($w, $h, imagick::FILTER_SINC, 1, false);
                        $im->setImageCompression(imagick::COMPRESSION_JPEG);
                        $im->setImageCompressionQuality(100);
                        $im->setImageFormat("jpeg");
                        $im->writeImage($print_jpeg);
                        $im->clear();
                        $im->destroy();

                        $print_jpegs[] = $print_jpeg;
                    }
                }
            }
4

0 に答える 0