Загрузка PHP по умолчанию имеет разрешение 72 dpi, мне нужно 300 dpi

У меня есть страница, которая используется только для печати, а некоторые изображения загружены через скрипт, который у меня есть. Кажется, что изображение всегда уменьшается до 72 точек на дюйм, независимо от того, что я установил для качества imagejpeg() и imagepng().

Я использовал свой личный скрипт и этот на git hub

https://github.com/maxim/smart_resize_image

Я надеялся получить небольшое руководство по сохранению исходного разрешения 300 точек на дюйм.

Вот мой личный скрипт

if (!empty($_FILES['image']['name'])) //checking if file upload box contains a value
    {   
        $saveDirectory = 'pics/';           //name of folder to upload to
        $tempName = $_FILES['image']['tmp_name'];   //getting the temp name on server
        $fileName1 = $_FILES['image']['name'];      //getting file name on users computer

        $count = 1;
        do{
        $location = $saveDirectory . $_GET['section'] . $count . $fileName1;
        $count++; 
        }while(is_file($location));

        if (move_uploaded_file($tempName, $location))   //Moves the temp file on server
            {                                                           //to directory with real name
                $image = $location;

                // Get new sizes
                list($width, $height, $type) = getimagesize($image);    //gets information about new server image

                $framewidth = 932;
                $frameheight = 354;

                $realwidth = $width;    //setting original width and height
                $realheight = $height;

                // Load
                $file1new = imagecreatetruecolor($framewidth, $frameheight);    //creates all black image with target w/h

                if($type == 2){
                    $source = imagecreatefromjpeg($image);
                    imagecopyresampled($file1new, $source , 0, 0, 0, 0, $framewidth, $frameheight, $realwidth, $realheight);
                }
                elseif($type == 3){
                    $source = imagecreatefrompng($image);    
                    imagecopyresampled($file1new, $source , 0, 0, 0, 0, $framewidth, $frameheight, $realwidth, $realheight);
                }
                else{
                    echo "Wrong file type";
                }

                if($type == 2){

                    //creates jpeg image from file1new for file1 (also retains quality)
                    imagejpeg($file1new, $image,100);
                    //frees space
                    imagedestroy($file1new);
                }
                elseif($type == 3){

                    //creates png image from file1new for file1 (also retains quality)
                    imagepng($file1new, $image,10);
                    //frees space
                    imagedestroy($file1new);
                }
                else{
                    echo "Wrong file type";
                } 
            } 
            else 
            {
                echo '<h1> There was an error while uploading the file.</h1>';
            }
        }
}

Редактировать: даже если dpi не является ответом, поскольку я вижу, что jpg в частности не сохраняют эту информацию. Мне нужен какой-то способ сохранить эти изображения очень четкими и четкими.


person d.lanza38    schedule 03.05.2012    source источник
comment
ImageMagick также демонстрирует такое поведение? Может и так попробовать.   -  person Ja͢ck    schedule 04.05.2012
comment
Я еще ничего не пробовал с магией изображений. Я изучаю это сейчас. (Я никогда не использовал его раньше).   -  person d.lanza38    schedule 04.05.2012
comment
Я отказался от GD в пользу imagick, это просто потрясающе, и вы можете найти так много примеров манипулирования изображениями, о которых вы никогда не знали, что это так просто ... конечно, если он не может делать то, что вы описали, это все равно будет отстой ;-)   -  person Ja͢ck    schedule 04.05.2012
comment
Я изучал это, и ImageMagick на самом деле не вариант для меня. У меня установлена ​​последняя версия GD, и я использую технику здесь us3.php.net/manual/en/function.imageconvolution.php#104006, но хотя мои изображения на экране выглядят в десять раз лучше, при печати они все еще имеют пикселизацию. После небольшой математики кажется, что изображения имеют разрешение 96 точек на дюйм, а не исходные 300 точек на дюйм, исходя из ширины и высоты в дюймах и количества пикселей, о которых сообщается изображения. 300 пикселей х 450 пикселей, 3,125 х 4,688.   -  person d.lanza38    schedule 07.05.2012
comment
У меня также есть новый скрипт загрузки, не слишком отличающийся от того, который я изначально опубликовал, но в нем есть некоторые улучшения. Если вы хотите, чтобы это было опубликовано, я могу добавить его к своему исходному сообщению.   -  person d.lanza38    schedule 07.05.2012
comment
Привет @ d.lanza38, да, не могли бы вы загрузить окончательное решение, которое вы нашли? У меня такая же проблема.   -  person user961627    schedule 13.01.2013
comment
Кстати, один из комментариев здесь полезен, я думаю: stackoverflow.com/questions/2002814/   -  person user961627    schedule 13.01.2013


Ответы (2)


Если вы создадите изображение и откроете его в браузере, перед рендерингом браузер уменьшит его до 72 точек на дюйм. Если вы откроете с помощью gimp/phptoshop/любого графического редактора, он должен сохранить то же качество dpi. Хотя на экране разницы нет, так как ваш экран 72 dpi.

На новых браузерах не проверял, но так было в netscape и первых версиях firefox, полагаю, с тех пор ничего не изменилось.

person stefgosselin    schedule 03.05.2012
comment
Хорошо, если я загружу png 300 dpi (как отображает Photoshop) на свой сервер через ftp и сохраню его через веб-браузер на свой рабочий стол, он останется 300 dpi. Так что, по крайней мере, для pngs в firefox 12.0 Windows xp x86 браузер не будет уменьшать dpi до 72 dpi. - person d.lanza38; 04.05.2012
comment
Интернет имеет разрешение 72 dpi, это не позволяет вам показывать более высокое разрешение в Интернете. - person Simon Dragsbæk; 21.11.2012
comment
Репост для других, которые могут наткнуться здесь. Похоже, что это уже не так, поскольку практически любой монитор в настоящее время обрабатывает большее количество точек на дюйм. Чтобы узнать, как работает ваш монитор, перейдите по этой ссылке: infobyip.com/detectmonitordpi.php. Раньше мониторы были все 72 DPI, теперь это не так. - person stefgosselin; 16.01.2013
comment
@Simon - В Интернете нет точек на дюйм. У вашего монитора есть dpi. Изображения в Интернете могут иметь любое разрешение dpi (72, 300 и т. д.), именно ваш монитор решает, в каком разрешении вы просматриваете. - person stefgosselin; 16.01.2013

Функция, опубликованная lorezyra (at) lorezyra (dot) com здесь: http://www.php.net/manual/es/function.imagejpeg.php#85712 может помочь.

person Jeff Hines    schedule 03.05.2012
comment
Хорошо, я прочитал функцию, и кажется, что она возвращает xdpi и ydpi. Как мне использовать эти значения, чтобы сохранить разрешение моих изображений? Кроме того, кажется, что это будет работать только с jpg, для этого конкретного случая мне НУЖНЫ только jpg, чтобы сохранить их разрешение, но я никогда не осознавал, что качество моих изображений никогда не сохраняется, и я обычно разрешаю изображениям .jpg и .png для быть загружены. Поэтому я хотел бы придумать функцию, которая могла бы обрабатывать оба. - person d.lanza38; 04.05.2012
comment
Я думаю, что эти числа представляют собой горизонтальную и вертикальную плотность изображения. - person Jeff Hines; 04.05.2012
comment
Да, но как мне использовать эти цифры? Извини, я действительно просто не знаю. - person d.lanza38; 04.05.2012
comment
Хм... Может быть, эта страница может помочь: stackoverflow.com/questions/5892731/ Вам нужно будет установить ImageMagick, я думаю - person Jeff Hines; 04.05.2012
comment
РЕДАКТИРОВАТЬ: Опубликовано не в том месте, это сообщение на самом деле немного вверху экрана. - person d.lanza38; 07.05.2012