Thread Verfasser: Catzenjaeger
Thread ID: 886
Thread Info
Es gibt 11 Beiträge zu diesem Thema, und es wurde 5293 Mal angesehen.  Ausserdem wurden Dateien angehängt.
 Thema drucken
Thumb als Kopie des Orginals speichern
Catzenjaeger
Bin verzweifelt .. stundenlang habe ich gesucht und probiert mein vorhandenen Bildupload so umzubauen das eine verkleinerte Kopie im ordner figurelib/downloads/thumbs gespeichert wird.

Dazu habe ich den Ordner in der infusion.db.php deklariert

if (!defined("IMAGES_FIGURE_THUMBS")) {
define("IMAGES_FIGURE_THUMBS", INFUSIONS.$inf_folder."/downloads/thumbs/");
}

in der submit wo der User das Bild hochläd versuchte ich das einzubauen .. doch ohne Erfolg

Ich denke das müsste genau an diese Stelle:

Zitat

$image_full = image_exists(IMAGES_FIGURE, $image_name.$image_ext);
move_uploaded_file($_FILES['figure_image']['tmp_name'], IMAGES_FIGURE.$image_full);
if (function_exists("chmod")) { chmod(IMAGES_FIGURE.$image_full, 0644); }
$imagefile = @getimagesize(IMAGES_FIGURE.$image_full);
if ($imagefile[0] > $asettings['figure_photo_max_w'] || $imagefile[1] > $asettings['figure_photo_max_h']) {
$error = 8;
unlink(IMAGES_FIGURE.$image_full);
} else {
createthumbnail($filetype, IMAGES_FIGURE.$image_full, IMAGES_FIGURE.$image_full, 600, 600);

#######hier muss das hin#########
}
}


Eigentlich wurde da schon ein Thumb gemacht aber ich habe die werte geändert damit ein großes Bild gespeichert wird. Weil so wie ursprünglich wird ja keinen Orginalgröße gespeichert. Das könnte man sicher so lassen und nur zusätzlich einen Kopie des Bildes speichern - verkleinert. Aber da hört meine Fahigkeit wieder mal auf

Hier ( http://www.winkelb.com/index.php?id=p...=php-thumb ) habe ich zwar einen Anleitung gefunden allerdings verstehe ich das nicht ganz was ich wie ändern muss.

Wenn ich das richtig versteheh benötigt man nur diese Zeichen noch zusätzlich um ein Thumb zu erstellen. Das soll gleich heissen nur im anderen ordner analog dazu liegen.

Es geht um dieses:

Zitat

$image_p = imagecreatetruecolor(100, 100);
$image = imagecreatefromjpeg("Pfad zum Verzeichnis/$bild_name");
imagecopyresampled($image_p, $image, 0, 0, 0, 0, 100, 100, 400, 400);
imagejpeg($image_p, "Pfad zum Verzeichnis/thumb/$bild_name", 100);


so was ich auch nicht verstehe wenn ich später das Bild irgendwo abrufen will muss ich das dann nicht auchin der datenbank speichern damit ich weis welches Orginale dazu gehört. wenn die figur gelöscht wird müsste ja auch das Thumb dazu glöscht werden .. also wird auch ein Zusammenhang benötigt damit das richtige mit gelöscht wird weil sonst gibts ja chaos.

Könnt ihr mir da helfen das noch umzusetzen? das wäre super lieb

Zusammengefügt am 24. Mai 2016 um 22:57:39:
wolle nochmals ganz lieb nachfragen ob da jemand einm tip geben kann :)
Bearbeitet von Catzenjaeger am 24. Mai 2016 20:57:50
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
David
Hallo Catzenjaeger,

ich vermute mal, da du ja auch eine infusion_db.php hast, dass es sich um eine PHP-Fusion Infusion, sogar v7 handelt?

Falls Ja, wieso lieferst du nicht die mitgelieferte Funktion?

Du musst in deine Datei die "includes/infusion_include.php" einbinden.

Die Funktion würde lauten:

function upload_image(
   $source_image, $target_name = "", $target_folder = IMAGES, $target_width = "1800", $target_height = "1600",
   $max_size = "150000", $delete_original = false, $thumb1 = true, $thumb2 = true,
   $thumb1_ratio = 0, $thumb1_folder = IMAGES, $thumb1_suffix = "_t1", $thumb1_width = "100", $thumb1_height = "100",
   $thumb2_ratio = 0, $thumb2_folder = IMAGES, $thumb2_suffix = "_t2", $thumb2_width = "400", $thumb2_height = "300",
   $query = ""
);


Kurze Erklärung der einzelnen Angaben:

Zitat

"source_image" => Name des Upload Feldes
"target_name" => Gewünschte Name der Datei
"target_folder" => Speicherort des original Bildes
"target_width" => Maximale Breite des Bildes
"target_height" => Maximale Höhe des Bildes
"target_size" => Maximale Dateigröße des Bildes (in Bytes)
"delete_original" => Gibt an, ob die originale Datei erhalten bleibt
"thumb1" => Gibt an, ob Thumb1 erstellt werden soll
"thumb2" => Gibt an, ob Thumb2 erstellt werden soll
"thumb1_ratio" => Gibt das Thumb1 Verhältnis an (0 = Verhältnise beibehalten, 1 = Quadratisch)
"thumb1_folder" => Gibt den Ordner des Thumb1 an
"thumb1_suffix" => Gibt an, ob der Dateiname Thumb1 erweitert werden soll
"thumb1_width" => Gibt die Breite des Thumb1 an
"thumb1_height" => Gibt die Höhe des Thumb1 an
"thumb2_ratio" => Gibt das Thumb2 Verhältnis an (0 = Verhältnise beibehalten, 1 = Quadratisch)
"thumb2_folder" => Gibt den Ordner des Thumb2 an
"thumb2_suffix" => Gibt an, ob der Dateiname des Thumb2 erweitert werden soll
"thumb2_width" => Gibt die Breite des Thumb2 an
"thumb2_height" => Gibt die Höhe des Thumb2 an
"query" => MySQL Query zum ausführen


Die Rückgabewerte der Funktion wären:

Zitat

"image" => true = Datei hochgeladen / false = Datei nicht hochgeladen
"image_name" => Vollständiger Dateiname inkl. Dateiendung
"image_ext" => Dateiendung
"image_size" => Dateigröße in Bytes
"image_width" => Breite des Bildes
"image_height" => Höhe des Bildes
"thumb1" => true = Thumb1 erstellt / false = Thumb1 nicht erstellt, da Datei zu klein
"thumb1_name" => Vollständiger Name von Thumb1 inkl. Dateiendung
"thumb2" => true = Thumb2 erstellt / false = Thumb2 nicht erstellt, da Datei zu klein
"thumb2_name" => Vollständiger Name von Thumb2 inkl. Dateiendung
"error" => 0 = Keine Fehler, 1 = Datei zu groß, 2 = Dateiendung falsch, 3 = Datei zu breit/hoch, 4 = Query fehlerhaft, 5 = Keine Datei hochgeladen
"query" => Gibt das MySQL Query aus


Praxisbeispiel

// Datei hochladen
$upload = upload_image(
   "file_image", "Mein Bild", IMAGES, 2200, 1900,
   300000, false, true, false,
   0, IMAGES, "_thumb1", 300, 300
);

// Prüfe, ob Fehler vorhanden sind
if ($upload['error']) {
   switch ($upload['error']) {
      case 1: $error = "Die Dateigröße ist zu groß."; break;
      case 2: $error = "Der Dateityp ist nicht erlaubt."; break;
      case 3: $error = "Die Datei ist zu breit / zu hoch."; break;
      case 4: break; // Hier ist nichts zutun, da wir kein Query benützen
      case 5: $error = "Es wurde keine Datei hochgeladen"; break;
   }

   // Fehler ausgeben
   echo $error;

// Andersfalls Daten auslesen zur weiteren Verarbeitung
} else {
   $image_name = $upload['image_name']; # Dateiname
   $thumb1_name = $upload['thumb1_name']; # Thumb1 Name
}


Das Praxisbeispiel ist natürlich mit den wenigsten Funktionen, das ganze kann man noch sehr stark ausbauen.
Liebe Grüße, David Smile

PHP-Fusion Österreich
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Catzenjaeger
Hallo David, vielen Dank für deinen Antwort. Leider sind meine Fähigkeiten eher begrenzt :)

Du wirst es nicht mitbkommen haben aber ich habe die erlaubnis die ehemalige Booklib Infusion in einen Figurelib Infusion umzubauen und entsprechend meinen bedürfnissen eienr Figurendatenbank aufzubohren. Nun momentan bin ich noch am verfeinern einiger Funktionen wie z.B auch den Bildupload.

Der ist schon vorhanden allerings war in der alten booklib nur die möglichkeit ein Bookcover hochzuladen ... das ist der ensprechende Teil in der submit.php :

Zitat

$image_full = image_exists(IMAGES_FIGURE, $image_name.$image_ext);
move_uploaded_file($_FILES['figure_image']['tmp_name'], IMAGES_FIGURE.$image_full);
if (function_exists("chmod")) { chmod(IMAGES_FIGURE.$image_full, 0644); }
$imagefile = @getimagesize(IMAGES_FIGURE.$image_full);
if ($imagefile[0] > $asettings['figure_photo_max_w'] || $imagefile[1] > $asettings['figure_photo_max_h']) {
$error = 8;
unlink(IMAGES_FIGURE.$image_full);
} else {
createthumbnail($filetype, IMAGES_FIGURE.$image_full, IMAGES_FIGURE.$image_full, 600, 600);

#######hier , davon ging ich auf musste man einfach noch den code für weitere Bilder einfügen bzw den Code der aus dem obrigen ein thumb macht das ich dann später weniger speicherintensiv vorladen kann. momentan lade ich das komplette Bild immer #########
}
}


Übrigens einsetzen will ich das ganze in einer VERSION 9! Ich will nicht mehr zurück das bringt nichts.

Leider habe ich prgammieren nie so richtig gelernt .. ich habe unzählige tutorials und bücher gelesen aber das lernt man nicht so einfach. Die praxis fehlt mir auch.

Nun deine Erklärungen sind ausführlich aber ganz ganz ehrlich ich weiss nicht genau was ich machen soll :)

Wenn du mir helfen könntst das step by step zu machen wäre ich dir sehr dankbar

so wie ich verstanden habe muss ich ertmal in der includes/infusion_include.php deine Funktion da einbauen.
Da kommt schon das erste ???? dort gint es wohl schon eine mächtige IMAGE UPLOAD funktion. Den Code spare ich mir aufgrund der länge.

Oder meintest du das ich folgendes in mein submit.php einbinen muss:

Zitat

require_once INCLUDES."includes/infusion_include.php";


Du siehst .. bin ein schwiergiger Fall da ich teileweise leider genau weiss was die sachen eigentlich bewirken bzw machen. Wie gesagt ich versuch mein bestes und schau mir andere Infusionen an wie es dort gemacht ist. Ist aber auch nicht einfach

Ok als Schritt 2 soll ich diesen Code in meine Submit zusätzlich einbauen oder den ich oben gepostet habe ersetzen??

Zitat

function upload_image(
$source_image, $target_name = "", $target_folder = IMAGES, $target_width = "1800", $target_height = "1600",
$max_size = "150000", $delete_original = false, $thumb1 = true, $thumb2 = true,
$thumb1_ratio = 0, $thumb1_folder = IMAGES, $thumb1_suffix = "_t1", $thumb1_width = "100", $thumb1_height = "100",
$thumb2_ratio = 0, $thumb2_folder = IMAGES, $thumb2_suffix = "_t2", $thumb2_width = "400", $thumb2_height = "300",
$query = ""
);
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
David
Hallo Catzenjaeger,

wie du bereits richtig festgestellt hast, musst du lediglich die Datei einbiden. In diesem Fall wäre die Codezeile hierfür:

require_once INCLUDES."infusions_include.php";


Anschließend könntest du theorätisch den alten Image-Upload entfernen und einfach nur die Funktion aufrufen (siehe Praxisbeispiel). Da aber der Code hier nicht vollständig ist, kann ich dir diesen leider nicht komplett zusammenstellen mit Kommentaren im Code zur leichteren Erklärung.

Am besten hängst du dein Einsendeformular an, dann kann ich mir das mal ansehen.
Liebe Grüße, David Smile

PHP-Fusion Österreich
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Catzenjaeger
Hallo, heisst die funktion ist in der version 9 schon drin ... muss quasi nur einbgebunden werden.

das includen ist kein themea nur wie man einen funktion aufruft und nutzt das kann ich leider nich nicht :) Muss ich noch lernen .. aber das ist schon viel stuff für ein Anfänger :)

Momentan kann in der submit.php vom User ein Bild hochgeladen werden:
In der ursprünglichen booklib war das das Cover des buches . Bei mir ist das sozusagen das Hauptbild der Figur.

Erweiterhin möchte ich, dass der user neben diesen Hauptbild noch weitere Bilder hochladen kann. Ich habe dazu in der FIGURES DB schon spalten angelegt image1, image2 usw.

Auslagern in einen andere FIRURES IMAGES wäre auch denkbar.

Momentan wird im code schon gepostet ein thumb erstellt. Da mir das zu klein war habe ich das in den seetings praktisch abgeändert und die werte dort erhöht. So wird jetzt zwar offiziell ein thumb erstellt aber riesengroß :) ... ich wusste keine andere Möglichkeit wie ich das sonst machen sollte


Mein Wunsch wäre das der User 10 Bilder hat die er hochladen darf. Diese sollen in der maximal Auflösung vorliegen und von jeden Bild soll noch thumb für Panle und Vorschauen generiert und im THUMB Ordner gespeichert werden.
Catzenjaeger hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
David
Probiere mal, ob der Image Upload mit Thumb so funktioniert.
David hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.

Liebe Grüße, David Smile

PHP-Fusion Österreich
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Catzenjaeger
Hallo David,

das Bild wird als Thumb im gleichen ordner gespeichert .. super das funzt.

Jetzt noch eine Fragen meinerseits dazu:

1.) sollte man die Bilder auslagern (also Thmbs in einen extra Order?)
2.) ich gehe davon aus das das löschen oder ändern einer Figur auch geändert werden muss (nur wie???) weil ja das Thumb ja bei bearbeiten oder ändern der Figur auch die passenden Bilder mit gelöscht werden müssen)..
3.) in der datenbank müsste man das Thumb doch auch speichern damit zum passenden Bild auch das entsprechend Thumbnail mittel ID zuordnen zu können.
4.) könnte man das irgendwo erweitern auf mehrere Bilder?

dann wäre ich schön glücklich :)

Übrigens hier gibt das alles zu sehen:
figure library: http://aliencollectors.com/test/infus...figure.php
figure submit: http://aliencollectors.com/test/infus...submit.php

ist einen Testseite also wer zugang will kann sich gerne melden

DANKE DAS IHR MIR HELFT :: FINDE DAS ECHT BOMBE :)
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
David
Kommt drauf an wieviele Figuren angelegt werden, vorallem wieviele Bilder.
Sollten insgesamt alle Einträge über 100 Bilder werden, würd ich rein aus Übersicht schon sagen, Ja es hat sinn.

Mehrere Bilder ist eigentlich garkein Problem .. man müsste nur die Formularfelder erweitern, sowie die Datenbanktabelle um ein paar Felder und eben korrekt hochladen.

Beim bearbeiten muss man eben prüfen, ob es ein neues Bild gibt, falls ja das alte löschen (ist relativ aufwendig bei mehreren Bildern pro Eintrag).
Liebe Grüße, David Smile

PHP-Fusion Österreich
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Catzenjaeger
Danke für deine Antwort

Also es werden schon einige hundert Figuren werden. Ich bin ja selbst Sammler und weiss wovon ich rede :)

Ich habe in der bisherigen Datenbank schon neue Spalten angelegt. Heisst dort gibt es

figure_image
figure_imgage_1
figure_imgage_2
figure_imgage_3
figure_imgage_4
figure_imgage_5 usw.

ich hätte aus dem Bauch gesagt dazu noch die passenden Thumb spalten

also

figure_image_thumb
figure_imgage_thumb_1
figure_imgage_thumb_2
figure_imgage_thumb_3
figure_imgage_thumb_4
figure_imgage_thumb_5 usw.

dann hätte man immer die richtigen Bilder zur jedweiligen Figuren ID.

Nur weiss ich halt nicht ob das so überhaupt sinnvoll ist oder machbar. Nun müsste man beim Submit usw auch die Bilder in die entsprechenden Spaltens chreiben .. das sollte möglich sein.

Ich hätte jetzt den momentan Uploads einfach 9 mal kopiert und jeweils die Variablen um "eins" erhöht.

Ob das sinnvoll ist weiss ich nicht ... ich bin dazu momentan noch nicht in der Lage (rein von meiner programmierfähigkeit)


Ich weiss nicht ob das auch geht das man nur die normalen Bilder speichert und von denen quasi ein Thumb jeweils mit gleichen Namen in einen extra Ordner der THUMB heisst speichert. wenn man die Figur löscht oder das Bild dann müsste das Bild im normalen und im THUMB Ordner löschen.

Mir ist bekannt das es wohl auch schon diesen Multiplen Upload gibt... aber ich weiss nicht wie das funktioiert. Das sieht hammer kompliziert aus ..

Ich benutze ja PHP FUSION 9 und dort ist ja noch mächtiger.

Zusammengefügt am 07. Juni 2016 um 22:46:00:
ich muss nochmal in die Runde fragen weil mein Bilderuplaod immer noch nicht geht.

Es wird weder was in die DB gescrieben noch wass in den Ordner hochgeladen und ich finde nicht heraus warum

hier der DB Eintrag

Zitat

// BILDER UPLOAD
if (!empty($_FILES) && is_uploaded_file($_FILES['figure_image']['tmp_name'][0])) {
$upload = form_sanitizer($_FILES['figure_image'], '', 'figure_image');
if ($upload['error'] == 0) {
foreach ($upload['target_file'] as $arr => $file_name) {
$adata = array(
'figure_images_figure_id' => $insert_id,
'figure_images_image' => $file_name,
'figure_images_thumb' => $file_name.'_t1',
);
dbquery_insert(DB_FIGURE_IMAGES, $adata, "save", array(
'keep_session' => TRUE
));
}
}
}


hier der Part aus dem Form

Zitat

//IMAGE UPLOAD
echo form_fileinput('figure_image', $locale['figure_136'], false, array(
'upload_path'=> INFUSIONS."figurelib/figures/",
"thumbnail" => TRUE,
"thumbnail2" => TRUE,
"max_byte" => $asettings['figure_photo_max_b'],
"max_count" => 10,
"multiple" => TRUE,
"width" => "400px",
"template" => "modern"
));


ich finde da nichts sieht alles schlüssig aus - habt ihr einen Idee?
Ich hänge mal die ganze submit.php nochmal zusätzlich mit an

Übrigens habe ich mal den Code des Form -Eintrags nach so abgändert ... aber auch da wird nichts übergeben bzw gespeichert.


echo form_fileinput('figure_image', $locale['figure_136'], false, array(
         'upload_path'=> INFUSIONS."figurelib/figures/",
         "thumbnail" => TRUE,
         "thumbnail_w" => 300,
         "thumbnail_h" => 300,
         "thumbnail_folder" => "",
         "thumbnail_suffix" => "_t1",
         "thumbnail2" => TRUE,
         "thumbnail2_w" => 600,
         "thumbnail2_h" => 400,
         "thumbnail2_suffix" => "_t2",
         "delete_original" => FALSE,
         "max_byte" => $asettings['figure_photo_max_b'],
         "max_width" => $asettings['figure_photo_max_w'],
         "max_height" => $asettings['figure_photo_max_h'],
         "max_count" => 10,      
         "multiple" => TRUE,
         "width" => "400px",
         'type' => 'image',
         "required" => FALSE,
         "safemode" => FALSE,
         "deactivate" => FALSE,
         "preview_off" => TRUE,
         "type" => "image", //// ['image', 'html', 'text', 'video', 'audio', 'flash', 'object']
         "width" => "100%",
         "label" => $locale['browse'],
         "inline" => TRUE,
         "class" => "",
         "tip" => "",
         "ext_tip" => "",
         "error_text" => $locale['error_input_file'],
         "btn_class" => "btn-default",
         "icon" => "fa fa-upload",
         "jsonurl" => FALSE,
         "valid_ext" => ".jpg,.png,.PNG,.JPG,.JPEG,.gif,.GIF,.bmp,.BMP",
         "template" => "modern"
      ));
Catzenjaeger hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.

Bearbeitet von Catzenjaeger am 07. Juni 2016 20:54:39
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
John Doe
Ist jetzt vielleicht ein Wenig an der eigentlichen Frage vorbei, aber warum willst du überhaupt ein zusätzliches THUMB speichern?
Warum lädtst du das Bild nicht einfach nur in Originalgrösse (ohne Kopie) hoch und definierst dann für ein kleines Vorschaubild in Panels o.Ä. eine entsprechende Grösse direkt bei der Darstellung? Ob nun über CSS oder HTML ist da erstmal egal...

Und wenn du dieses verkleinerte Vorschaubild dann noch entsprechend verlinkst, hast du durch einen Klick auf das Bild die Originalgrösse.

Klingt (zumindest für mich jetzt) doch wesentlich einfacher....
Dieses Mitglied wurde gelöscht!
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Catzenjaeger
ich habe mich ja ein bisschen schlau gemacht und gesehen das es performancemässig große Vorteile bringt das so zu machen.
Da die Bilder in diversen Stellen und Panels zu sehen sein sollen wollte ich aus Performance Gründen die Thumbs schon abspeichern als sie jedes mal neu zu generieren. Das soll viel besser sein.

Mein oberstes Problem ist ja das im Moment überhaupt keine Bilder gespeichert werden und ich weiß nicht warum . Der Code scheint schlüssig allerdings bin ich kein PHP Guru und finde den Fehler nicht.

Ich möchte gerne, das der User der einen Figur einsendet bis zu 10 Bilder pro Figur einsenden darf. Die sollen der Figur zugeordnet werden und dann in der Figurenübersicht zu sehen sein. Das erste Bild was der User auswählt soll quasi das Coverbild sein die 9 anderen zusätzliche Bilder.



Speichern will ich im Ordner
figurelib/figures/images oder figurelib/figures/thumbs

das machts aber nicht und auch in de DB IMAGES wirtd nichts geschrieben
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Springe ins Forum: