Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Фиксиран размер на снимки


Lenor

Препоръчан отговор


Здравейте. Нужно ми е малките снимки да бъдат фиксирани с големина 220х180. Сега почти всяка картинка си е с различен размер.
 
 
// Дефиниране на константи с размер за малките картинки
define("IMAGE_HEIGHT",  180);
define("IMAGE_WIDTH",  210); 
 
 
$allowed_ext  = array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
 
// Начало на обработката
if ( !empty($_FILES) ) {
// Имаме субмитнати файлове
//echo "<pre>";
//print_r($_POST);
//print_r($_FILES);
 
// Брой на субмитнатите картинки
$number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;
 
if ( $number_of_images > 0 ) {
// Извъртаме всички картинки
foreach ( $_FILES['images']['name'] as $nImagekey => $sImagaName ) {
// Файла е качен успешно, провеверки, местени и манипулации
if ( isset($_FILES['images']['error'][$nImagekey]) && $_FILES['images']['error'][$nImagekey] == UPLOAD_ERR_OK ) {
// Проверка за тип на файла
$extension = pathinfo($sImagaName, PATHINFO_EXTENSION);
 
if ( !in_array($_FILES['images']['type'][$nImagekey], $allowed_type) ) {
echo "Невалиден файлов формат!";
exit; 
} else if ( !in_array($extension, $allowed_ext) ) {
echo "Невалиден файлов формат!";
exit;
}
 
// Закачаме уникално име на файла, базирано на неговата хеш сума. 
// Ако бъдат качени два или повече еднкави файла, без значение от 
// техните имена, накрая ще има само едно налично копие от тях.
$fn  = sprintf(sha1_file($_FILES['images']['tmp_name'][$nImagekey]).'.%s', $extension);
$file_name  = sprintf(IMAGES_BIG_DIR.'%s', $fn);
$file_name_sm  = sprintf(IMAGES_SMALL_DIR.'%s', $fn);
 
// <changes>
$original_images_array[]  = $file_name;
$small_images_array[]  = $file_name_sm;
// </changes>
 
// Местим качения файл от временната директория в указаната
// Ако има роблеми с функцията move_uploaded_file(), може вместо нея да се използва функцията copy()
if ( !copy($_FILES['images']['tmp_name'][$nImagekey], $file_name) ) {
echo "Файла не може да бъде обработен.";
exit;
}
 
// Малки картинки
// Неизвестна реализация на функцията resize_image; Неизвестна променлива $latin_name;
//resize_image("../".$file_name,'210','180',IMAGES_SMALL_DIR.$latin_name."_pic_".$nImagekey.$extension);
 
// Бърза реализация - ако не ти хареса, изтрий я.
if ( strtolower($extension) == "jpg" ) {
$raw_img = imagecreatefromjpeg($file_name);
} else if ( strtolower($extension) == "png" ){
$raw_img = imagecreatefrompng($file_name);
}
 
if ( $raw_img ) {
$raw_x = imageSX($raw_img);
$raw_y = imageSY($raw_img);
 
if ($raw_x > $raw_y) {
$thumb_w = IMAGE_WIDTH;
$thumb_h = $raw_y * (IMAGE_HEIGHT / $raw_x);
} else if ($raw_x < $raw_y) {
$thumb_w = $raw_x * (IMAGE_HEIGHT / $raw_y);
$thumb_h = IMAGE_HEIGHT;
} else if ($raw_x == $raw_y) {
$thumb_w = IMAGE_WIDTH;
$thumb_h = IMAGE_HEIGHT;
}
 
$thumb = ImageCreateTrueColor($thumb_w, $thumb_h);
imagecopyresampled($thumb, $raw_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $raw_x, $raw_y); 
 
if ( strtolower($extension) == "jpg" ) {
imagejpeg($thumb, $file_name_sm);
} else if ( strtolower($extension) == "png" ){
imagepng($thumb, $file_name_sm);
}
 
imagedestroy($thumb); 
imagedestroy($raw_img);  
}
}
}
}
Линк към коментара
Сподели в други сайтове

GD съблюдава съотношение на изходната снимка и се подстройва под близко значение на една от двете константи при преоразмеряване. Вашето желание е малко странно и доближава 5:4. Ако очаквате желания резултат следва и изходните снимки да са с подобно съотношение.

Линк към коментара
Сподели в други сайтове

  • 1 месец по-късно...

Добре, но неможе да няма начин да фиксирам размерите на всяка една снимка въпреки това, че може да се попрецака малко снимката. В olx например снимките в обявите всеки един от тъмбалите са с точен размер.

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване