Мне нужна помощь с моей логикой (изменить размер изображения)

  • Автор темы eminemuz
  • 34
  • Обновлено
  • 12, May 2024
  • #1
Привет, ребята!!

Я пытаюсь добавить PHP-код для изменения размера изображения. В основном пользователи загружают изображение.

И это изображение помещается в документ PDF, но мне нужно ограничить размер (пикселей) этого изображения.

Если его высота слишком велика, содержимое будет перенесено на вторую страницу.

Чего я не хочу.
В настоящее время у меня есть этот код, который в некоторой степени работает, но я хочу, чтобы ширина изображения превышала 80, это совершенно нормально, поскольку оно не сдвигает страницу вниз.:

Но опять же, я хочу убедиться, что ширина не превышает 480 пикселей, поэтому я хочу уменьшить ее.

Например, я хочу ограничить высоту до 80 и ширину до 480, если больше, то масштабировать соотношение сторон (без его искажения) до этих значений.

Любая помощь или совет будут очень признательны.

  function imageResize($imageResourceId,$width,$height) {

$ratio = $width/$height; // width/height

if( $ratio > 1) {

$targetWidth = 80;

$targetHeight = 80/$ratio;

}else {

$targetWidth = 80*$ratio;

$targetHeight = 80;

}

$targetLayer=imagecreatetruecolor($targetWidth,$targetHeight);

imagecopyresampled($targetLayer,$imageResourceId,0,0,0,0,$targetWidth,$targetHeight, $width,$height);

return $targetLayer;

}
PHP:

eminemuz


Рег
17 Apr, 2014

Тем
1

Постов
1

Баллов
11
  • 18, May 2024
  • #2
Я узнал еще кое-что более важное... на самом деле это вообще не нужно ограничивать, но это помогает сэкономить место, когда пользователи загружают изображения. Но я узнал, что в момент вставки изображения можно сделать следующее:



style="Максимальная высота: 80 пикселей; Максимальная ширина: 480 пикселей;" /> Я провел исследование в Интернете и обнаружил, что соотношение сторон сохраняется. и ограничивает изображение, что мне и нужно.
 

gnombik


Рег
27 Sep, 2013

Тем
0

Постов
2

Баллов
2
  • 03, Jun 2024
  • #3
Я обновил это это было так: $ratio < $targetratio теперь это $ratio > $targetratio теперь работает. Я попробую ваш код. это тоже должно работать. Я все еще ломаю голову над этим.
 

mirage1


Рег
23 Feb, 2012

Тем
1

Постов
2

Баллов
12
  • 08, Jun 2024
  • #4
Я изменил это на это. Сейчас тестирую, работает или нет
  function imageResize1($imageResourceId,$width,$height) {

$ratio = $width/$height; // width/height

$widthlimit = 480;

$heightlimit = 80;

$targetratio = $widthlimit/$heightlimit;

if( $ratio > $targetratio ) {

$targetWidth = $widthlimit;

$targetHeight = $widthlimit/$ratio;

}else {

$targetWidth = $heightlimit*$ratio;

$targetHeight = $heightlimit;

}

$targetLayer=imagecreatetruecolor($targetWidth,$targetHeight);

imagecopyresampled($targetLayer,$imageResourceId,0,0,0,0,$targetWidth,$targetHeight, $width,$height);

return $targetLayer;

}
PHP:
 

Zaglumilo


Рег
02 Mar, 2014

Тем
1

Постов
2

Баллов
12
  • 12, Jun 2024
  • #5
Большая проблема с вашей логикой заключается в том, что вы пытаетесь использовать ОДНО соотношение вместо масштабирования, с ELSE, когда это должна быть логика стиля «и», где необходимо выполнить ОБА проверки для обоих направлений.
 

// note, round off, there's no such thing as fractional pixels

$targetWidth = $width;

$targetHeight = $height;

if ($targetWidth > 480) {

$ratio = 480 / $targetWidth;

$targetWidth = round($targetWidth * $ratio);

$targetHeight = round($targetHeight * $ratio);

}

if ($targetHeight > 80) {

$ratio = 80 / $targetHeight;

$targetWidth = round($targetWidth * $ratio);

$targetHeight = round($targetHeight * $ratio);

}
Код (разметка): это логика, которая вам нужна при настройке максимальной ширины и максимальной высоты с сохранением соотношения сторон.

Проверьте одно направление, масштабируйте его до него, ЗАТЕМ проверьте другое направление и масштабируйте его до этого.

Сейчас ваша логика работает, если результат коррекции ширины превышает коррекцию высоты, высота никогда не будет достигнута! ... и да, вы можете ограничить размер на стороне клиента, но не отправляйте огромные изображения на стороне клиента, если этого можно избежать.

Хотя при использовании дисплеев Retina и различных точек на дюйм все чаще встречается увеличение целевого разрешения в 2 раза.

Взгляните на тег , чтобы узнать, как теперь можно объявлять несколько изображений разных размеров, чтобы использовать на своих страницах только ту полосу пропускания, которую НУЖНО использовать.
 

Deymos1


Рег
22 Nov, 2012

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно