2017-05-12 8 views
1

透明な背景を持つPNG画像をアップロードすると問題が発生し、結果は黒い背景になります。私が望むのは、pngの透明な背景をアップロードした後で、結果は元のファイルと同じになります。フォームのアップロードは、あなたが透明でキャンバスを埋めるために必要Transparancy背景アップロード機能用PNG

include "../../config/upload.php"; 
$module=$_GET['module']; 
$act=$_GET['act']; 
if ($module=='sponsors' AND $act=='input'){ 
    $ukuran_maksimal  = 30000000; 
    $acak     = rand(0000,9999); 
    $image_info = getimagesize($_FILES["fupload"]["tmp_name"]); 
    $lebar = $image_info[0]; // width of image 
    $tinggi = $image_info[1]; // height of image 
    //$lebar    = 800; 
    //$tinggi     = 534; 

    //$fold     = $_POST['folder']; 
    $id_kategori   = $_POST['id_kategori_blog']; 
    $folder     = "images/"; 
    $lokasi_file   = $_FILES['fupload']['tmp_name']; 
    $tipe_file    = $_FILES['fupload']['type']; 
    $nama_file    = $_FILES['fupload']['name']; 
    $ukuran_file   = $_FILES['fupload']['size']; 
    $nama_file    = str_replace(' ', '_', $nama_file); 
    $nama_file    = $acak.$nama_file; 

    upload_sponsors($nama_file,$folder,$lokasi_file,$lebar,$tinggi); 

       mysql_query("INSERT INTO sponsors(judul,link,isi,gambar) 
             VALUES('$_POST[judul]','$_POST[link]','$_POST[isi]','$nama_file')"); 
       echo "<script>window.alert('Upload image succes'); 
       window.location=('../../main.php?module=sponsors')</script>"; 

} 

答えて

1

action.php

を提出した後 ここ

function upload_sponsors($nama_file,$folder,$lokasi_file,$lebar,$tinggi){ 
$nama_folder = "../../../$folder/"; 
$ext = end((explode(".", $nama_file))); # extra() to prevent notice 
list($lebar_asli, $tinggi_asli, $source_type) = getimagesize($lokasi_file); 
if ($ext == "gif"){ 
    $gambar_asli = imagecreatefromgif($lokasi_file); 
} else if($ext =="png"){ 
    $gambar_asli = imagecreatefrompng($lokasi_file); 
} else { 
    $gambar_asli = imagecreatefromjpeg($lokasi_file); 
} 

$ukuran_asli = $lebar_asli/$tinggi_asli; 
$ukuran = $lebar/$tinggi; 
if ($ukuran_asli > $ukuran) { 
    $tinggi_sementara = $tinggi; 
    $lebar_sementara = (int) ($tinggi * $ukuran_asli); 
} else { 
    /*jika gambar sama atau lebih tinggi*/ 
    $lebar_sementara = $lebar; 
    $tinggi_sementara = (int) ($lebar/$ukuran_asli); 
} 
$gambar_sementara = imagecreatetruecolor($lebar_sementara, $tinggi_sementara); 
imagecopyresampled($gambar_sementara,$gambar_asli,0, 0,0, 0,$lebar_sementara, $tinggi_sementara,$lebar_asli, $tinggi_asli); 
/*Copy cropped region from temporary image into the desired GD image*/ 
$x_absis = ($lebar_sementara - $lebar)/2; 
$y_absis = ($tinggi_sementara - $tinggi)/2; 
$gambar_akhir = imagecreatetruecolor($lebar, $tinggi); 
imagecopy($gambar_akhir,$gambar_sementara,0, 0,$x_absis, $y_absis,$lebar, $tinggi); 

if ($ext == "gif"){ 
    imagegif($gambar_akhir,$nama_folder.$nama_file); 
} else if($ext =="png"){ 
    imagepng($gambar_akhir,$nama_folder.$nama_file); 
} else { 
    imagejpeg($gambar_akhir,$nama_folder.$nama_file); 
} 

imagedestroy($gambar_akhir); 
} 

upload.php機能

のためのコードは、これはアクションです再サンプリングされる前に、色:

imagefill($gambar_sementara, 0, 0, 0x7fff0000); 

0x7fff0000は、完全に透明な色の場合は16進コード文字列です。 imagecolorallocatealpha()を使用して透明な色を作成することもできます。

アルファチャンネルを有効にするには、imagesavealpha()も使用する必要があります。あなたのコードで

$gambar_sementara = imagecreatetruecolor($lebar_sementara, $tinggi_sementara); 
imagesavealpha($gambar_sementara, true); 
imagefill($gambar_sementara, 0, 0, 0x7fff0000); 
imagecopyresampled($gambar_sementara,$gambar_asli,0, 0,0, 0,$lebar_sementara, $tinggi_sementara,$lebar_asli, $tinggi_asli); 

そして、さらに下:

$gambar_akhir = imagecreatetruecolor($lebar, $tinggi); 
imagesavealpha($gambar_akhir, true); 
imagefill($gambar_akhir, 0, 0, 0x7fff0000); 
imagecopy($gambar_akhir,$gambar_sementara,0, 0,$x_absis, $y_absis,$lebar, $tinggi); 

参照:

http://php.net/manual/en/function.imagefill.php http://php.net/manual/en/function.imagesavealpha.php http://php.net/manual/en/function.imagecolorallocatealpha.php

+0

@AgnesPuspasari私は更新をした - あなたは私がそれを必要とします新しい画像リソースを作成するたびに、2つの場所(上記参照)が透明になるように塗りつぶす必要があります。 –

+0

こんにちは、背景が赤に変わりました。スクリプトfff0000 透明に変更する必要はありますか? –

+0

申し訳ありませんが、私はもう一回、 'imagesavealpha()'を使って呼び出しを行います。上記をもう一度見てください@AgnesPuspasari :) –

関連する問題