webForumDet fria alternativet

Hjälp med foto beskärnings app!

PHP

17 svar · 1 552 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Tänkte använda denna: http://sa.ndropad.in/coverphoto/

Vill då på något vis spara ner den bilden man skapar men har INGEN aning hur jag då skall göra. Någon som kan hjälpa till eller som har en redan fungerande app som gör detta?

Medlem sedan juni 20004 308 inlägg
#2

Bilden sparas som base64-kodad PNG i variabeln dataUrl. Stoppa det värdet i ett formulärsfält, eller posta via ajax, till servern och packa upp datat med base64_decode.

Medlem sedan dec. 20011 860 inlägg
#3

Okej, ska se om jag kan fixa till det för fattar nada av base64 saken...

Medlem sedan juni 20004 308 inlägg
#4

Ok, det är inte så komplicerat. De flesta bildformat innehåller binärt data. base64 är ett sätt att koda (binärt) data med enbart ascii-tecken. Detta för att det skall gå att transportera binärt data via andra format som i sig inte tillåter binärt data. Som exempelvis när du skickar ett mail. base64_decode tar alltså en sträng med ascii-tecken och avkodar det till orginaldatat som ofta är binärt, som i detta fall en PNG-bild.

Medlem sedan dec. 20011 860 inlägg
#5

Nu har jag sökt runt och fattar inte hur jag ska skriva iallafall! Hur skriver jag i denna? Och vilket värde skall jag spara informationen i php sen?

  <script type="text/javascript">
    $(function() {
      $(".coverphoto").CoverPhoto({
        currentImage: '<?php echo $base_url; ?>coverphoto/funny.jpg',
        editable: true
      });
      $(".coverphoto").bind('coverPhotoUpdated', function(evt, dataUrl) {
        $(".output").empty();
        $("<img>").attr("src", dataUrl).appendTo(".output"); 
      });
    });
  </script>

Filen ska typ heta savephoto.php som jag skall spara ner detta. Kommer inte att skriva ut den omskurna bilden som den gör utan har hidden på .output

Medlem sedan mars 2007845 inlägg
#6

Varför ska du ha output om du inte ska visa något? Då räcker det ju att skicka base64-koden till servern.

Medlem sedan dec. 20011 860 inlägg
#7

Det var så i koden på scriptet. Så nu vill jag ha hjälp hur jag ska skriva för att spara ner det via ajax!

Medlem sedan juni 20004 308 inlägg
#8
  <script type="text/javascript">
    $(function() {
      $(".coverphoto").CoverPhoto({
        currentImage: '<?php echo $base_url; ?>coverphoto/funny.jpg',
        editable: true
      });
      $(".coverphoto").bind('coverPhotoUpdated', function(evt, dataUrl) {
        $(".output").empty();
        $("<img>").attr("src", dataUrl).appendTo(".output"); 
        var imageData = dataUrl.replace(/^.*?base64,/i, ""); // URLen börjar med data:image/png;base64, - Det tar vi bort.
        $.post("http://www.yourdomain.se/savephoto.php", { myImage: imageData } );
        });
    });
  </script>
<?php
$file = fopen("/path/to/your/image.png","wb");
fwrite($file,base64_decode($_POST["myImage"]));
fclose($file);
?>
Medlem sedan dec. 20011 860 inlägg
#9

Skall php koden vara savephoto.php eller hur är det tänkt? Sökvägen på fopen förstår jag ju men vilken bild menar du man skall skriva där? Är väl det värdet som kommer i myImage? Eller vad är det jag inte förstår?

Medlem sedan juni 20004 308 inlägg
#10

Asa skrev:

Skall php koden vara savephoto.php eller hur är det tänkt?

Yes, korrekt.

Asa skrev:

Sökvägen på fopen förstår jag ju men vilken bild menar du man skall skriva där?

Det är sökvägen till den beskärda bilden som du vill spara... Antar att det var det du ville åstakomma? Filen skapas med bilddatat som skickas via ajax.

Asa skrev:

Är väl det värdet som kommer i myImage? Eller vad är det jag inte förstår?

Värdet som kommer i post-variabeln myImage är ren PNG-data som sparas direkt ner i filen. Jag vet inte vad det är du inte förstår :)

Medlem sedan dec. 20011 860 inlägg
#11

Okej så jag ska alltså ge bilden ett eget namn i savephoto.php?

Medlem sedan juni 20004 308 inlägg
#12

Jao, det känns som en god idé så skrivs inte samma fil över hela tiden. :) Antar att du har något användar-id som kan vara lämligt att använda.

Medlem sedan dec. 20011 860 inlägg
#13

Okej, får testa imorgon om jag får igång det för idag gick det inge bra. :/ Är nog för trött.
Kan man på nå vis se i en alert namnet på bilden när man klickar på Spara också?

Medlem sedan dec. 20011 860 inlägg
#14

Samt kan man skriva ut om man skrivit fel sökväg i savephoto.php ? Så jag verkligen vet att det är rätt!

Medlem sedan juni 20004 308 inlägg
#15

alert är en javascript-funktion som körs i webbläsaren. Filnamnet som bilden har innan du beskär den är tämligen irrelevant. Om 2 använder använder en bild med samma namn ska dom ju inte påverka varandra. Så det namnet bör du inte använda på serversidan.

Beträffande sökvägen på serversidan är ett tips att använda dirname(_FILE_) som returnerar sökvägent till katalogen där php-scriptet körs ifrån. Så ungefär:

$file = fopen(dirname(__FILE__)."/$uniqueFileName.png","wb");

$uniqueFileName skall då innehålla filnamnet som bilden skall sparas som.

Medlem sedan dec. 20011 860 inlägg
#16

Det verkar ta tid innan bilden kan visas fast den har sparats i mappen. Låter detta konstigt eller är det så? Sen är det problem att skriva över filen? Måste man skriva något speciellt?

Medlem sedan juni 20004 308 inlägg
#17

Prova

$file = fopen(dirname(__FILE__)."/$uniqueFileName.png","w+b");

Istället för att kunna skriva över filen. Alternativt, radera filen med unlink innan du skriver till den. Låter konstigt att den inte kan visas på en gång. Antagligen släpper inte php filen på en gång. Har inget bra svar på det.

Medlem sedan dec. 20011 860 inlägg
#18

Tackar för svaret. Kanske är servern som är seg..

257 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)