Portfolio met watermerk

Door Rene Wennekes, 14 jaar geleden, 3.804x bekeken

Laatst had ik een gesprek met een freelance fotograaf en een model over het beheren van een portfolio op internet. Zodoende heb ik me wat verdiept in de functies van GD en kwam ik uit op dit script welke ik later wil uitwerken.

Op regel 112 en 113 kun je de namen van de thumbnail en image map bepalen. Uiteraard de nodige lees en schrijfrechten geven.

Op regel 122 wordt de md5 van "123456" vergeleken. Als je een ander wachtwoord wilt, zul je dit handmatig moeten aanpassen.

Dus op het voorbeeld kunnen jullie inloggen met 123456, leef jullie uit (s.v.p. verwijder alleen eigen ge-uploade foto's).

De belangrijkste code staat op regel 193 t/m 227. Hier kun je zien hoe het watermerk wordt toegevoegd. Als je dit op je eigen server wilt draaien moet je ervoor zorgen dat je een link heb naar een font (regel 219).

De foto wordt vanuit de tijdelijke buffer meteen bewerkt ($tempimage) in (regel 207 & 213) en geschaald in de daaropvolgende regel. In regel 221&223 worden 2 watermerkjes toegevoegd. Ik heb bij de commentaar de parameters gezet die de kleur, transparantie, positie en hoek bepalen. Op regel 226&227 worden de bestanden daadwerkelijk geschreven.

Ik weet dat de veiligheid niet erg hoog is, iedereen kan zonder wachtwoord door de juiste toevoeging achter de url, bestanden verwijderen.

Voor degene die zich afvragen, voor het uiterlijk heb ik me laten inspireren door een thema van JAlbum, maar gewoon op het oog overgenomen (kleur achtergrond en grijs randje om de foto).

Uiteraard dient dit script qua beveiliging en functie nog aangepast te worden zoals. bv. paginanummering, maar ik dacht laat ik dit plaatsen wie weet vind iemand dit nog interessant. Het gaat erom om de functies als voorbeeld te bestuderen.

Suc6,

Rene

Voorbeeld: http://www.wennekes.info/sample1/sample1.php

Gesponsorde koppelingen

PHP script bestanden

  1. portfolio-met-watermerk

 

Er zijn 30 reacties op 'Portfolio met watermerk'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
p.s. Het voorbeeld zal niet echt snel werken, heb het thuis draaien met een beperkte upload.
plz. take care of my server :)
Michael Voeten
Michael Voeten
14 jaar geleden
 
0 +1 -0 -1
leuk script, maar misschien met je je iets meer houden aan het MVC model ?
Edit:

*edit* ... zelfs al is dit zijn wachtwoord, hoeft niet openbaar op internet toch ??
- wes  -
- wes -
14 jaar geleden
 
0 +1 -0 -1
zet het geheel even tussen tags
Erik Rijk
Erik Rijk
14 jaar geleden
 
0 +1 -0 -1
Quote:
zet het geheel even tussen tags
Ik ben al zo lief geweest
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
<shame>Thanx</shame>
PHP Newbie
PHP Newbie
14 jaar geleden
 
0 +1 -0 -1
Ziet er netjes uit, werkt goed. Code had wat netter gekunt, maar toch een dikke voldoende!

Edit:

Hmmm.. wanneer ik een bestand upload (540 KB, JPG) krijg ik de melding dat het geen JPG bestand is..
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Had net ff gestoeid met bestandsrechten en nu gaat uploaden niet meer.

Dit omdat iemand zo leuk was om ALLE foto's te verwijderen.

Ik moet ff verder experimenteren met de bestand/maprechten, script werkt uiteraard op 777.

grt,

Rene

p.s. net ff getest voorbeeld werkt weer en een aantal foto's kunnen NIET verwijderd worden (foutmelding). Dit is geen scriptfout maar ik heb deze bestanden read-only gezet.

Overigen heb ik idd een script aanpassing moeten doen op regel 183.

if ($filetype != "image/pjpeg" and $filetype != "image/jpeg") {$warnmessage = "Het bestand is geen jpg bestand.";}

Schijnbaar moest pjpeg toegevoegd worden. Het is een keuze dat alleen voor jpg gekozen is.
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
Het resultaat ziet er netjes uit, de code om het resultaat te bereiken echter minder...

Als ik je script zo even snel doorlees kom ik al snel veel foutjes tegen als variabelen tussen quotes, strings zonder quotes, nutteloos kopieren van POST en GET variabelen.

Verder ontbreken de nodige controles/beveiligen in je script. Het is nog niet echt veilig in het gebruik en dat zou ook prima kunnen verklaren waarom iemand makkelijk je foto's kon verwijderen...
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Aan Blanche:

Het is de bedoeling dat foto's verwijdert kunnen worden.
Alleen heb ik de voorbeeld foto's read-only gemaakt worden, dus bij deze zal er een foutmelding komen. Naderhand ge-uploade foto's kunnen wel door iedereen verwijderd worden.

Inderdaad kan bij een aantal form methods gekozen worden voor php_self zodat na een delete opdracht niet onnodig word meegegeven.
Verander dan de reuest_uri op regel 187 naar php_self.

grt,

Rene
Jurgen assaasas
Jurgen assaasas
14 jaar geleden
 
0 +1 -0 -1
Ik zie ook:

$login = $_POST['login'], deze wordt dus altijd geset. Maar als $_POST['login'] niet bestaat krijg je een dikke notice.

Gebruik dus if($_SERVER['REQUEST_METHOD']...
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Je bedoelt dat isset($login) altijd gelijk is aan TRUE ?

Eventueel $login gewoon veranderen in $_POST['login'] in regel 131 ???

of is if ($login == "" and md5($password) == "csww")
wel logisch?

- Rene -
Jelle Posthuma
Jelle Posthuma
14 jaar geleden
 
0 +1 -0 -1
En houdt variables/strings buiten quotes.

if (unlink("$map1/$image") == TRUE) {

Kan dit worden:

if (unlink($map1.'/'.$image)) {
Lode
Lode
14 jaar geleden
 
0 +1 -0 -1
Ik heb zoiets in mijn watermarker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

        switch($x){
            case
0            : $nx =    round(($this->width/2) - ($w/2));        break;
            case (
$x < 0)    : $nx =    round(($this->width - $w) - abs($x));    break;
            case (
$x > 0)    : $nx =    round($x);                                break;
        }

        Switch($y){
            case
0            : $ny =    round(($this->height/2) - ($h/2));        break;
            case (
$y < 0)    : $ny =    round(($this->height - $h) - abs($y));    break;
            case (
$y > 0)    : $ny =    round($y);                                break;
        }

?>


je kan dus een $x, $y offset meegeven.

0 is midden
<0 is offset pixels negatief
>0 is offset pixels positief

$x=-5, $y=-5 is dus 5 pixels vanaf rechts en bodem... dus rechter hoek onderin..

misschien n ideetje?
Hannes Bossuyt
Hannes Bossuyt
14 jaar geleden
 
0 +1 -0 -1
Wat ik niet begrijp , waarom maak je een md5 van je wachtwoord ? php kan sowieso niet uitgelezen worden , enkel bij een database heeft dit nut (sql injection ed)
Mike van Dongen
Mike van Dongen
14 jaar geleden
 
0 +1 -0 -1
@Hannes, is altijd handig voor als er mensen "toevallig" meekijken of als het een gedeelde server is.
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Mijn volgende plan is om de exif informatie die de digitale camera bjsluit in het bestand (en met PS aangevuld kan worden) deze eruit te halen, evt. in een bestandje te zetten en dit bij de foto af te drukken.

Is daar al een tutorial over de exif informatie?

Rene
Terence Hersbach
Terence Hersbach
14 jaar geleden
 
0 +1 -0 -1
@rene, php.net heeft daar ondersteuning voor : http://nl3.php.net/exif
Jan geen
Jan geen
14 jaar geleden
 
0 +1 -0 -1
Kan je hier wat mee?
Kevichill
Kevichill
14 jaar geleden
 
0 +1 -0 -1
Ik krijg elke keer de foutmelding :
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3072 bytes) in D:\Server\Webserver\htdocs\users\partypics\index.php on line 206

Terwijl het fototje maar 826 KB is ...
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Gebruik je wamp? Kijk eens in je php.ini
Daar staat de werkelijk maximale groote van het upload bestand in (veiligheid en deze staat bij mij op 2M), en een evt. map als cache bv. c:\windows\temp
Is dit een ntfs map?
Heb je al eerder op je eigen webserver wel bestanden kunnen uploaden?
Heb je al gegoogled?
Bart van Asselt
Bart van Asselt
14 jaar geleden
 
0 +1 -0 -1
Werkt niet bij mij, Fatal error: Cannot instantiate non-existent class: directoryiterator
PHP Newbie
PHP Newbie
14 jaar geleden
 
0 +1 -0 -1
Je hebt geen PHP 5
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
En je moet uiteraard en ; weghalen in de php.ini waar de gd bibliotheken worden aangesproken.

Maar bij mij werkte GD zowiezo bij PHP5.

Maak een version.php aan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
Phpinfo();
?>


En je kunt de modules controleren.
Bart van Asselt
Bart van Asselt
14 jaar geleden
 
0 +1 -0 -1
PHP Version 4.4.7

Agrh

Probleem opgelost. extentsie veranderen naar .php5

in .htaccess

AddHandler x-httpd-php5 .php
Ruud
ruud
14 jaar geleden
 
0 +1 -0 -1
Bij het uploaden van de foto's, gaat de kwaliteit van de foto's achteruit of dat niet?
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Als je bedoelt dat de foto kleiner wordt, ja logisch. De foto wordt klaargestoomd voor webpublicatie en dat is veel kleiner dan de originele foto, die na het proces uit het geheugen van de server wordt verwijderd.

Eerst had ik gewoon de resize functie gebruikt en dat was idd erg veel kwaliteit verlies t.o.v. resample functie.

Ik vind zelf niet dat er verschil is tussen het kleiner maken via dit php script t.o.v. het handmatig kleiner maken via bv. Photoshop.
Ruud
ruud
14 jaar geleden
 
0 +1 -0 -1
oke. Nee het verschil valt wel mee, hoewel ik het wel zie.
Hoe kan je ervoor zorgen dat de bestanden zich op de originele grote uploade? zonder te resizen dus.
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Als je - thumbnails uitgezonderd - regel 107 weghaalt of remarked, vind er bij de grote foto's geen resampling plaats. Dan wordt alleen het watermerk uitgevoerd.
Ruud
ruud
14 jaar geleden
 
0 +1 -0 -1
Ik heb regel 107 geremarked, maar nou upload hij alleen een zwarte foto. Doe ik iets fout hierbij?

Verder had ik nog een vraagje, Ik heb script zo aangepast dat ik bij het uploaden van de foto een aantal textvakjes moet invullen (naam, datum, etc) die dan als tekst op de foto komen te staan. Nou wil ik alleen de achtergrond van de copyright een kleurtje geven (wit bijvoorbeeld). Hoe doe je dat?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Rene Wennekes
Rene Wennekes
14 jaar geleden
 
0 +1 -0 -1
Klopt op 105 & 106 wordt een leeg plaatje aangemaakt. Kijk eens op http://www.php.net/ naar een functie dir image copy doet ipv. imagecopyresize.

Kijk ook eens naar de functie imagecreate, ik heb hierbij breedte en hoogte erbij moeten opgeven, wellicht is dat verplicht, dan zal je het script enigszins moeten aanpassen door een breedtje en hoogte op te vragen van het imagebestand dat je upload. Die geef je dan vervolgens weer bij imagecreate weer op.

Wat betreft de text, kijk eens op genoemde site eens naar de 2functies waar ik de kleurinstelling en de tekst moest regelen welke eigenschappen je nog meer kan gebruiken.
http://nl2.php.net/imagecolorallocate
http://nl2.php.net/imagettftext

Er zijn ook functies om bv. een witte balk te plaatsen in het image.

Je kunt zelfs schaduw maken door 2x text waarvan 1x zwart iets schuin-naast de andere text te plaatsen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. portfolio-met-watermerk

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.