2013-06-07 37 views
10

Tôi đã xem xét tất cả về cách quản lý đúng alpha khi tôi đổi kích thước png. Tôi đã cố gắng làm cho nó giữ được độ trong suốt, nhưng chỉ cho các pixel hoàn toàn trong suốt. Dưới đây là mã của tôi:Thay đổi kích thước hình ảnh với tính minh bạch trong php

$src_image = imagecreatefrompng($file_dir.$this->file_name); 
$dst_image = imagecreatetruecolor($this->new_image_width, $this->new_image_height); 
imagealphablending($dst_image, true); 
imagesavealpha($dst_image, true); 
$black = imagecolorallocate($dst_image, 0, 0, 0); 
imagecolortransparent($dst_image, $black); 
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $this->new_image_width, 
       $this->new_image_height, $this->image_width, $this->image_height); 
imagepng($dst_image, $file_dir.$this->file_name); 

Bắt đầu với hình ảnh nguồn này:

enter image description here

Những hình ảnh thay đổi kích cỡ trông như thế này:

enter image description here

Các giải pháp cho hầu hết các bài diễn đàn tôi đã xem xét về vấn đề này nói để làm một cái gì đó như thế này:

imagealphablending($dst_image, false); 
$transparent = imagecolorallocatealpha($dst_image, 0, 0, 0, 127); 
imagefill($dst_image, 0, 0, $transparent); 

Kết quả từ mã này không thành công ở tiết kiệm bất kỳ alpha nào:

enter image description here

Có giải pháp nào khác? Tôi có thiếu thứ gì đó với pha trộn alpha không? Tại sao điều đó lại hiệu quả với mọi người, nhưng thất bại hoàn toàn đối với tôi? Tôi đang sử dụng MAMP 2.1.3 và PHP 5.3.15.

+0

bản sao có thể có của [Làm cách nào để thay đổi kích thước các png bằng tính minh bạch trong PHP?] (Http://stackoverflow.com/questions/279236/how-do-i-resize-pngs-with-transparency-in-php) – Danack

+0

Tôi đã thử các giải pháp được đưa ra trong bài đăng đó (và nhiều bài khác). Họ không làm việc gì cả và tôi không chắc tại sao. – user2458399

Trả lời

-2

tôi đã sử dụng lớp simpleImage để định lại kích thước hình ảnh. Bạn có thể thay đổi kích thước hình ảnh của mình bằng cách duy trì tỷ lệ khung hình. lớp này được sử dụng imagecreatetruecolorimagecopyresampled chức năng cốt lõi Php lại kích thước hình ảnh

$new_image = imagecreatetruecolor($width, $height); 
    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
    $this->image = $new_image; 

tìm mã hoàn chỉnh tại http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/

+0

Đây không phải là một câu hỏi, nhưng nó là không quan trọng vì người hỏi đang nhắm mục tiêu cụ thể vào thư viện GD tích hợp của PHP ... (điều này phải là bình luận, không trả lời) –

9
"They have not worked at all and I'm not sure why." 

Vâng, bạn phải đã và đang làm gì đó sai. Mã từ trùng lặp liên kết với một vài dòng thêm vào tải và lưu hình ảnh:

$im = imagecreatefrompng(PATH_TO_ROOT."var/tmp/7Nsft.png"); 

$srcWidth = imagesx($im); 
$srcHeight = imagesy($im); 

$nWidth = intval($srcWidth/4); 
$nHeight = intval($srcHeight /4); 

$newImg = imagecreatetruecolor($nWidth, $nHeight); 
imagealphablending($newImg, false); 
imagesavealpha($newImg,true); 
$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); 
imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent); 
imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, 
    $srcWidth, $srcHeight); 

imagepng($newImg, PATH_TO_ROOT."var/tmp/newTest.png"); 

Tạo hình ảnh:

A resized PNG with transparency

tức là câu hỏi này (và câu trả lời) là một bản sao hoàn chỉnh .

+0

Bạn có cả nền tảng, phiên bản PHP/GD/Imagemagick nào? Đây có lẽ là nguyên nhân. Hoặc, ngăn xếp tràn có thể là xử lý lại hình ảnh nguồn để bạn không thử nghiệm cùng một hình ảnh. – peterjwest

Các vấn đề liên quan