witam, chciałbym zapytać Was czy poniższy kod jest poprawny - kod przedstawia dodawanie miniaturek i całych zdjęć oraz tworzenie dla nich cieni(kod działa, ale są pewne mankamenty: duże zdjęcia jak i miniaturki są mocno kompresowane przez co zdjęcia tracą na jakości, zdjęcia są kilka razy zapisywane na dysku, jak zrobić by były zapisywane tylko raz) Za wszelką pomoc będę wdzięczny. Oto kod:
<?php
include("dane.php");
$result_final = "";
$counter = 0;
$photos_uploaded = $_FILES['plik'];
$photo_captions = $_POST['nazwa'];
$opis = $_POST['opis'];
$kategoria = $_POST['kategoria'];
$miejsce = $_POST['miejsce'];
$data = $_POST['data'];
$known_photo_types = array( 'image/pjpeg' => 'jpg',
'image/jpeg' => 'jpg',
'image/gif' => 'gif',
'image/bmp' => 'bmp',
'image/x-png' => 'png'
);
$gd_function_suffix = array( 'image/pjpeg' => 'JPEG',
'image/jpeg' => 'JPEG',
'image/gif' => 'GIF',
'image/bmp' => 'WBMP',
'image/x-png' => 'PNG'
);
while( $counter <= count($photos_uploaded) ) {
if($photos_uploaded['size'][$counter] > 0)
{
{
$result_final .= "Plik ".($counter+1)." nie jest zdjęciem.<br />";
}
else
{
if(!empty($_POST['data'][$counter])) {
$wyn = mysqli_query($dbc,"SELECT data,id FROM data_zdj WHERE data LIKE '$data'");
if(mysqli_num_rows($wyn) > 0)
{
$id_wlasciwe = mysqli_fetch_array($wyn);
$id_daty = $id_wlasciwe['id'];
}
else
{
$rezultat = mysqli_query($dbc,"INSERT INTO data_zdj(data) VALUES('$data')");
$id_daty = mysqli_insert_id($dbc);
}
}
else
{
$id_daty ='NULL';
}
if(!empty($_POST['miejsce'][$counter])) {
$miejsce = strip_tags($_POST['miejsce'][$counter]); $wyn = mysqli_query($dbc,"SELECT miejsce,id FROM miejsce_zdj WHERE miejsce LIKE '$miejsce'");
if(mysqli_num_rows($wyn) > 0)
{
$id_wlasciwe = mysqli_fetch_array($wyn);
$id_miejsca = $id_wlasciwe['id'];
}
else
{
$rezultat = mysqli_query($dbc,"INSERT INTO miejsce_zdj(miejsce) VALUES('$miejsce')");
$id_miejsca = mysqli_insert_id($dbc);
}
}
else
{
$id_miejsca='NULL';
}
if(!empty($_POST['kategoria'][$counter])) {
$kategoria = strip_tags($_POST['kategoria'][$counter]); $wyn = mysqli_query($dbc,"SELECT kategoria.nazwa,id FROM kategoria WHERE kategoria.nazwa LIKE '$kategoria'");
if(mysqli_num_rows($wyn) > 0)
{
$id_wlasciwe = mysqli_fetch_array($wyn);
$id_kategorii = $id_wlasciwe['id'];
}
else
{
$rezultat = mysqli_query($dbc,"INSERT INTO kategoria(nazwa) VALUES('$kategoria')");
$id_kategorii = mysqli_insert_id($dbc);
}
}
else
{
$id_kategorii='NULL';
}
if(!empty($_POST['opis'][$counter])) {
}
else
{
$opis ='NULL';
}
if(!empty($_POST['tytul'][$counter])) {
}
else
{
$tytul ='';
}
$dodano[$counter] = date("Y-m-d G:i:s");
mysqli_query($dbc,"INSERT INTO zdjecie(plik,nazwa,id_kategorii,id_miejsca,id_daty,opis,dodano,tytul)
VALUES('0', '".$photo_captions[$counter]."',$id_kategorii,$id_miejsca,$id_daty,'$opis','$dodano[$counter]','".$tytul."')" );
$new_id = mysqli_insert_id($dbc);
$filetype = $photos_uploaded['type'][$counter];
$extention = $known_photo_types[$filetype];
$filename = $new_id.".".$extention;
mysqli_query
( $dbc,"UPDATE zdjecie SET plik='".addslashes($filename)."' WHERE id='".addslashes($new_id)."'" ); copy($photos_uploaded['tmp_name'][$counter],"../".$images_dir."/".$filename); /*wielkość miniaturek*/
if($size[0] > $size[1])
{
$thumbnail_width = 150;
$thumbnail_height = (int)(150 * $size[1] / $size[0]);
}
else
{
$thumbnail_width = (int)(150 * $size[0] / $size[1]);
$thumbnail_height = 150;
}
$as = $size[0];
$bs = $size[1];
$function_suffix = $gd_function_suffix[$filetype];
$function_to_read = "ImageCreateFrom".$function_suffix;
$function_to_write = "Image".$function_suffix;
$source_handle = $function_to_read ( "../".$images_dir."/".$filename );
if($source_handle)
{
$cos = ImageCreateTrueColor ( $as, $bs );
ImageCopyResampled( $cos, $source_handle, 0, 0, 0, 0, $as, $bs, $size[0], $size[1] );
$destination_handle = ImageCreateTrueColor ( $thumbnail_width, $thumbnail_height );
ImageCopyResampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );
}
$function_to_write( $cos, "../".$images_dir."/".$filename );
//zapisuje miniaturki
$function_to_write( $destination_handle, "../".$images_dir."/tb_".$filename );
//ważne! - tu ustalam kolor mojego tła
$background = array( "r" => 218 , "g" => 215 , "b" => 200
); $src = '../zdjecia/tb_'.$filename;
$width = $o_width + DS_OFFSET ;
$height = $o_height + DS_OFFSET ;
$image = imagecreatetruecolor ( $width , $height );
$step_offset = array( "r" => ( $background [ "r" ] / DS_STEPS
), "g" => ( $background [ "g" ] / DS_STEPS
), "b" => ( $background [ "b" ] / DS_STEPS
)); $current_color = $background ;
for ( $i = 0 ; $i <= DS_STEPS ; $i ++) {
$colors [ $i ] = imagecolorallocate
( $image , round ( $current_color [ "r" ]), round ( $current_color [ "g" ]), round ( $current_color [ "b" ])); $current_color [ "r" ] -= $step_offset [ "r" ];
$current_color [ "g" ] -= $step_offset [ "g" ];
$current_color [ "b" ] -= $step_offset [ "b" ];
}
imagefilledrectangle ( $image , 0 , 0 , $width , $height , $colors [ 0 ]);
for ( $i = 0
; $i < count ( $colors ); $i ++) { imagefilledrectangle ( $image , DS_OFFSET , DS_OFFSET , $width , $height , $colors [ $i ]);
$width -= DS_SPREAD ;
$height -= DS_SPREAD ;
}
$original_image = imagecreatefromjpeg ( $src );
imagecopymerge ( $image , $original_image , 0 , 0 , 0 , 0 , $o_width , $o_height , 100 );
$function_to_write( $image, "../".$images_dir."/tb_".$filename );
$result_final .= "<img src='../".$images_dir. "/tb_".$filename."' /> Dodano ".($counter+1)." zdjęcie.<br />";
}
}
$counter++;
}
<html>
<head>
<title>Upload plików</title>
</head>
<body>
$result_final
</body>
</html>
__HTML_END;
?>