2013-12-01 5 views
0

Я хочу, чтобы изображения JPG, добавленные к прикреплению электронной почты, были 250 кБ или меньше. Я обнаружил, что для изображений в формате JPG это очень нелинейно, поэтому я сделал несколько тестов и решил, что максимум 2000000 пикселей, который я могу разрешить.Изменение размера изображения до приблизительного количества пикселей

Так что теперь мне нужно изменить размер каждого изображения до 2000000пикселей или значение как можно ближе. Это звучит совершенно невозможно:

x2*y2 = 2000000 
x2/y2 = x/y  //The aspect ratio must be the same 

Так в чем же решение для этого?

Моих мысли об этой проблеме:

  1. Для NxN изображений, коэффициент равен 1. (N = N конечно)
  2. За 9 пикселей и соотношение 1: x = y = sqrt(9) = 3
  3. Для NxM изображений, где N!=M и M∨N=1 отношение равно либо 1/M, либо N/1. Для p пикселей изображения тогда будут x=py=1 или наоборот.

С точки 3. Я знаю, что оба X и Y представляют собой значения между 1 и sqrt(p).

+0

Вы хотите повторно обработать большие изображения на более мелкие или просто запретить пользователю загружать их на свой лимит размера? –

+0

Измените размеры только больших изображений. И да, они должны быть изменены, а не отказались. –

+0

[и поэтому они должны] (http://www.php.net/manual/en/function.imagecopyresized.php) – samayo

ответ

0

Итак, в конце концов, есть ответ на another board (так как вы, ребята, здесь, на SO не делаете математику, очевидно).

И это, как реализация программы уравнения выглядит следующим образом:

function image_resize_to_pixel_count($im, $pixels) { 
    $x = imagesx($im); 
    $y = imagesy($im); 

    $S = $pixels; //I use S here to remind you, that it's analogic to rectangle area 

    //Define the coefficient for $x, $y (old image dimensions) 
    $h = sqrt($S/($x*$y)); 

    $x2 = round($h*$x); 
    $y2 = round($h*$y); 


    //Standard resize to x, y procedure follows from here 
} 
Смежные вопросы