Ich habe einige in PHP implementierte Bildgrößenänderungsfunktionen verwendet, aber einige Bilder sind nach der Anpassung vollständig deformiert, und einige haben ohne Grund mehr Linien, und einige haben auch eine schlechte Farbhelligkeit. Heute habe ich erneut gesucht und weitere Ergebnisse erzielt.
if(isset($_FILES['manager_photo']) && !empty($_FILES['manager_photo']['name'])) { $photo_name=$manager_name."-".$_FILES["manager_photo"]["name"]; $tmpname = $_FILES['manager_photo']['tmp_name']; $file_ext= substr($photo_name, strripos($photo_name, '.')); $dir = "./manager_photos/"; // finally resize @img_resize( $tmpname , 90 , $dir , $photo_name, 1); } function img_resize( $tmpname, $size, $save_dir, $save_name, $maxisheight = 0 ) { $save_dir .= ( substr($save_dir,-1) != "/") ? "/" : ""; $gis = getimagesize($tmpname); $type = $gis[2]; switch($type) { case "1": $imorig = imagecreatefromgif($tmpname); break; case "2": $imorig = imagecreatefromjpeg($tmpname);break; case "3": $imorig = imagecreatefrompng($tmpname); break; default: $imorig = imagecreatefromjpeg($tmpname); } $x = imagesx($imorig); $y = imagesy($imorig); $woh = (!$maxisheight)? $gis[0] : $gis[1] ; if($woh <= $size) { $aw = $x; $ah = $y; } else { if(!$maxisheight){ $aw = $size; $ah = $size * $y / $x; } else { $aw = $size * $x / $y; $ah = $size; } } $im = imagecreatetruecolor($aw,$ah); if (imagecopyresampled($im,$imorig , 0,0,0,0,$aw,$ah,$x,$y)) if (imagejpeg($im, $save_dir.$save_name)) return true; else return false; }//img_resize
Verwenden Sie ImageMagick, um es zu implementieren
Jemand hat erwähnt, dass Sie ImageMagick verwenden, um es zu implementieren. Es gibt viele Optionen und wir können eine Bildanpassung mit sehr wenig Code erreichen. Es lohnt sich zu studieren.
$image = new Imagick($src); $image->resizeImage($width,$height,Imagick::FILTER_LANCZOS,1); $image->cropImage($width_2, $height_2, $x, $y); $image->setCompression(Imagick::COMPRESSION_JPEG); $image->setImageCompressionQuality(82); $image->writeImage($dest); $image->destroy();
Verwenden Sie php_class_upload zum Implementieren
Wenn die obige Einführung nicht für Sie geeignet ist, können Sie nicht nur Bilder hochladen und anpassen, sondern auch ausschneiden, ausschneiden, Wasserzeichen hinzufügen, drehen und spiegeln , usw.
Andere Referenz zum Implementierungscode
Dieser Code kann das Bild und den richtigen Namen zurückgeben, aber er kann nur schwarz sein?
function resize($originalImage){ list($width, $height) = getimagesize($originalImage); $newName=basename($originalImage); $imageResized = imagecreatetruecolor(128, 128); $imageTmp = imagecreatefromjpeg($originalImage); imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, 128, 128, $width, $height); imagejpeg($imageResized, "resizedImg/$newName",100); imageDestroy($imageResized); }
Nachdem der Code verbessert wurde, sehen Sie sich den folgenden Code an, um die Farbe festzulegen.
function resizeImage($file){ define ('MAX_WIDTH', 1500);//max image width define ('MAX_HEIGHT', 1500);//max image height define ('MAX_FILE_SIZE', 10485760); //iamge save path $path = 'storeResize/'; //size of the resize image $new_width = 128; $new_height = 128; //name of the new image $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']); $image_type = $file['type']; $image_size = $file['size']; $image_error = $file['error']; $image_file = $file['tmp_name']; $image_name = $file['name']; $image_info = getimagesize($image_file); //check image type if ($image_info['mime'] == 'image/jpeg' or $image_info['mime'] == 'image/jpg'){ } else if ($image_info['mime'] == 'image/png'){ } else if ($image_info['mime'] == 'image/gif'){ } else{ //set error invalid file type } if ($image_error){ //set error image upload error } if ( $image_size > MAX_FILE_SIZE ){ //set error image size invalid } switch ($image_info['mime']) { case 'image/jpg': //This isn't a valid mime type so we should probably remove it case 'image/jpeg': $image = imagecreatefromjpeg ($image_file); break; case 'image/png': $image = imagecreatefrompng ($image_file); break; case 'image/gif': $image = imagecreatefromgif ($image_file); break; } if ($new_width == 0 && $new_height == 0) { $new_width = 100; $new_height = 100; } // ensure size limits can not be abused $new_width = min ($new_width, MAX_WIDTH); $new_height = min ($new_height, MAX_HEIGHT); //get original image h/w $width = imagesx ($image); $height = imagesy ($image); //$align = 'b'; $zoom_crop = 1; $origin_x = 0; $origin_y = 0; //TODO setting Memory // generate new w/h if not provided if ($new_width && !$new_height) { $new_height = floor ($height * ($new_width / $width)); } else if ($new_height && !$new_width) { $new_width = floor ($width * ($new_height / $height)); } // scale down and add borders if ($zoom_crop == 3) { $final_height = $height * ($new_width / $width); if ($final_height > $new_height) { $new_width = $width * ($new_height / $height); } else { $new_height = $final_height; } } // create a new true color image $canvas = imagecreatetruecolor ($new_width, $new_height); imagealphablending ($canvas, false); if (strlen ($canvas_color) < 6) { $canvas_color = 'ffffff'; } $canvas_color_R = hexdec (substr ($canvas_color, 0, 2)); $canvas_color_G = hexdec (substr ($canvas_color, 2, 2)); $canvas_color_B = hexdec (substr ($canvas_color, 2, 2)); // Create a new transparent color for image $color = imagecolorallocatealpha ($canvas, $canvas_color_R, $canvas_color_G,$canvas_color_B, 127); // Completely fill the background of the new image with allocated color. imagefill ($canvas, 0, 0, $color); // scale down and add borders if ($zoom_crop == 2) { $final_height = $height * ($new_width / $width); if ($final_height > $new_height) { $origin_x = $new_width / 2; $new_width = $width * ($new_height / $height); $origin_x = round ($origin_x - ($new_width / 2)); } else { $origin_y = $new_height / 2; $new_height = $final_height; $origin_y = round ($origin_y - ($new_height / 2)); } } // Restore transparency blending imagesavealpha ($canvas, true); if ($zoom_crop > 0) { $src_x = $src_y = 0; $src_w = $width; $src_h = $height; $cmp_x = $width / $new_width; $cmp_y = $height / $new_height; // calculate x or y coordinate and width or height of source if ($cmp_x > $cmp_y) { $src_w = round ($width / $cmp_x * $cmp_y); $src_x = round (($width - ($width / $cmp_x * $cmp_y)) / 2); } else if ($cmp_y > $cmp_x) { $src_h = round ($height / $cmp_y * $cmp_x); $src_y = round (($height - ($height / $cmp_y * $cmp_x)) / 2); } // positional cropping! if ($align) { if (strpos ($align, 't') !== false) { $src_y = 0; } if (strpos ($align, 'b') !== false) { $src_y = $height - $src_h; } if (strpos ($align, 'l') !== false) { $src_x = 0; } if (strpos ($align, 'r') !== false) { $src_x = $width - $src_w; } } // positional cropping! imagecopyresampled ($canvas, $image, $origin_x, $origin_y, $src_x, $src_y, $new_width, $new_height, $src_w, $src_h); } else { imagecopyresampled ($canvas, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); } //Straight from Wordpress core code. Reduces filesize by up to 70% for PNG's if ( (IMAGETYPE_PNG == $image_info[2] || IMAGETYPE_GIF == $image_info[2]) && function_exists('imageistruecolor') && !imageistruecolor( $image ) && imagecolortransparent( $image ) > 0 ){ imagetruecolortopalette( $canvas, false, imagecolorstotal( $image ) ); } $quality = 100; $nameOfFile = 'resize_'.$new_width.'x'.$new_height.'_'.basename($file['name']); if (preg_match('/^image\/(?:jpg|jpeg)$/i', $image_info['mime'])){ imagejpeg($canvas, $path.$nameOfFile, $quality); } else if (preg_match('/^image\/png$/i', $image_info['mime'])){ imagepng($canvas, $path.$nameOfFile, floor($quality * 0.09)); } else if (preg_match('/^image\/gif$/i', $image_info['mime'])){ imagegif($canvas, $path.$nameOfFile); } }
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Bildgrößenänderungsfunktion in PHP zum Anpassen der Bildgröße. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!