2016-05-21 11 views
0

Ich arbeite derzeit an Pligg CMS-basierten Website und seine Standard-Image Upload-Modul, die Thumbnails an Beiträge von Benutzer bereitgestellten Links hängt PHP-GD-Bibliothek für Bildverarbeitung . Die Thumbnails haben eine reduzierte Qualität und nach ein wenig Websuche fand ich, dass ich die imagecopyresized Funktion durch imagecopyresampled ersetzen sollte.Ersetzen der "imagecopyresized" -Funktion durch "imagecopyresampled" im Bild-Upload-Modul

Das Hauptproblem ist, ich bin ein Anfänger in Web-Entwicklung, und ich weiß nicht, wo ich anfangen soll. Das Stück Code Ich denke (also vielleicht falsch) für die Bildverarbeitung zuständig ist und bearbeitet werden muss, ist die folgende:

// create a new temporary image 
$tmp_img = imagecreatetruecolor($new_width, $new_height); 

// copy and resize old image into new image 
while (file_exists("$thumb_dir/$name$i.jpg")) $i++; 
$name = "$name$i.jpg"; 

imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

if (!imagejpeg($tmp_img, "$thumb_dir/$name",$settings['quality'])) 
    $error .= "Can't create thumbnail $thumb_dir/$name"; 
else 
    $db->query("INSERT INTO ".table_prefix."files 
      SET file_size='$size', 
       file_orig_id='$orig_id', 
       file_user_id={$current_user->user_id}, 
       file_link_id=$link_id, 
       file_ispicture=1, 
       file_comment_id='".$db->escape($_POST['comment'])."', 
       file_real_size='".filesize("$thumb_dir/$name")."', 
       file_name='".$db->escape($name)."'"); 
} 
return $error; 

Von dem, was ich sehe, wird das Bild zuerst durch die Funktion imagecreatruecolor verarbeitet in eine neue tmp_img, die dann durch die imagecopyresized Funktion verarbeitet wird.

Da ich keine Erfahrung habe, kann ich nicht sagen, ob dies der richtige Pfad für ein Bild der XY-Größe ist, um in der Größe geändert zu werden, ohne seine Qualität zu reduzieren. Sollte ich sowohl imagecreatetruecolor als auch imagecopyresized durch imagecopyresampled ersetzen?

Antwort

0

imagecopyresized und imagecopyresampled haben identische Parameteranforderungen, so dass Sie einfach den Funktionsnamen in der folgenden Zeile ändern können:

imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

Alles andere sollte gleich bleiben.

Beachten Sie, dass Ihr Code anfällig für SQL Injection ist. Lesen Sie weiter und beginnen Sie mit der Verwendung von prepared statements.