---
title: "Skapa PNG-bild (med transparens) från textsträng"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/141719-skapa-png-bild-med-transparens-från-textsträng"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2006-01-30T15:43:16.000Z"
updated: "2006-02-03T14:25:19.000Z"
replies: 23
views: 921
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/141719-skapa-png-bild-med-transparens-från-textsträng"
---

# Skapa PNG-bild (med transparens) från textsträng

_Sida 1 av 2._

## #1 — learn, 2006-01-30T15:43Z

Använder [detta skript](http://www.webforum.nu/showthread.php?t=46248) för att producera en bild utifrån en textsträng. Det funkar bra, men bilden blir ju licksom lite "grynig" mot en bildbakgrund... Jag skulle vilja att den får en fin transparens (typ png-24-kvalitet). Går det??

Permalänk: https://www.webforum.nu/p/141719

## #2 — flumpa, 2006-01-30T15:53Z

IE stöder tydligen inte PNG med trans. De finns ett ful hack för att få det att fungera.
Sök i Css forumet på PGN så hittar du säker massa bra information om problemet

Permalänk: https://www.webforum.nu/p/1756000

## #3 — learn, 2006-01-30T15:59Z

> **flumpa skrev:**
>
> IE stöder tydligen inte PNG med trans. De finns ett ful hack för att få det att fungera.
> Sök i Css forumet på PGN så hittar du säker massa bra information om problemet

Det är jag medveten om, men nu blir den även ful i FF. Tror inte bilden blir av typen png 24 i det skript jag använder. Jag undrar därför om man kan korrigera skriptet så bilderna blir finare..??

Permalänk: https://www.webforum.nu/p/1756003

## #4 — learn, 2006-01-31T14:13Z

...ingen som vet, inget som vet...?

Permalänk: https://www.webforum.nu/p/1756383

## #5 — learn, 2006-01-31T17:10Z

Har nu kommit en bit på vägen. Kom på att man kanske kan lägga texten på en genomskinlig bild... och på så sätt undvika de fula kanterna... Men nej nej. Blir lika illa ändå. Lägger jag en textstring på bilden mha funktionen "imagestring" så blir det ju snyggt, fast jag vill ju kunna välja font på texten!

Bifogar kod och de bilder (den genomskinliga som texten skrivs på och bakgrundsbilden som textbilden sedan läggs på) jag använder, så ni kan testa själva. 

Snälla hjälp mig!

```php
<?php 
header("Content-type: image/png");

$im = imagecreatefromgif('genomskinlig_bild.gif'); 
$white = imagecolorallocatealpha($im, 255, 255, 255, 75);

$string = "En text";

imagettftext($im, 14, 0, 10, 20, $white, "trebuc.ttf", $string); 
imagestring($im, 3, 10, 20, $string, $white);

imagepng($im, '', 0); 
imagedestroy($im); 
?>
```

Bilagor:

- [genomskinlig_bild.gif](https://www.webforum.nu/a/9519.gif)
- [bakgrund.jpg](https://www.webforum.nu/a/9520.jpg)

Permalänk: https://www.webforum.nu/p/1756428

## #6 — Matte, 2006-01-31T17:27Z

Du kan välja font för imagestring() med [imageloadfont](http://www.php.net/manual/en/function.imageloadfont.php), men det blir då inte dina vanliga ttf-fonter.

Du har max 2 argument/parametrar till funktionen imagepng(), men då du inte ska spara filen räcker det med den första.

Men varför göra en mellanladdning i en PNG-fil, varför inte lägga texten direkt på bilden ?

Permalänk: https://www.webforum.nu/p/1756444

## #7 — learn, 2006-01-31T17:35Z

> Du kan välja font för imagestring() med imageloadfont, men det blir då inte dina vanliga ttf-fonter.

Vad menar du med "inte dina vanliga", vilka är de då? Funkar det som så att jag lägger valbara fonter i en mapp på servern eller?

> Men varför göra en mellanladdning i en PNG-fil, varför inte lägga texten direkt på bilden ?

Så här ligger det till: Bakgrundsbilden som "textbilden" ligger på är inte bestämd utan skall enkelt kunna bytas ut, och dessutom så vill jag enkelt kunna flytta texten runt på bakgrunden. Bakgrundsbildens url och texten som skall skrivas ut hämtas från en databas.

Tipsa mig gärna om ett smartare sätt att lösa detta på!

Jag vill helt enkelt att det ska se ut som att texten är ditskriven på bakgrunden i Photoshop eller liknande. Ska se ut som en färdig bild...

Permalänk: https://www.webforum.nu/p/1756448

## #8 — Matte, 2006-01-31T18:28Z

Följde du länken till imageloadfont som jag gav tidigare så hade kanske förstått mer om fonterna, och hur du ska gå tillväga för att ändra.
Fonterna kan du enligt användarnoteringarna få tag på [här](http://www.widgnet.com/gdf_fonts/fonts.html), om det inte är så du vill göra egna.

Du har två vägar att följa.

1\. Du har en PNG-fil som du bygger upp med din text.
Med GD slår du samman PNG-bilden med den bild du vill ha.
Exempel har du [här](http://www.phpportalen.net/viewtopic.php?p=121310#121310).

2\. Du lägger texten direkt på bilden med GD.
Exempel har du [här](http://www.a-kok.com/test/image_text.php).

I bägge fallen kan du välja om du vill spara den sammanslagna bilden, eller generera den "on the fly".

Permalänk: https://www.webforum.nu/p/1756467

## #9 — learn, 2006-01-31T18:52Z

Tack!

GDF-fonterna är ju mindre läckra... Kan man välja storlek och isf hur?

> 2\. Du lägger texten direkt på bilden med GD.
> Exempel har du här.

 Detta skulle kunna va intressant. Kan man lägga texten på en bakgrund istället för på en bild?

Permalänk: https://www.webforum.nu/p/1756474

## #10 — Matte, 2006-01-31T20:15Z

Själv skulle jag utan tvekan välja att använda mig av [imagettftext](http://www.php.net/manual/en/function.imagettftext.php) istället.
Storleken anger du i andra parametern, i points.

För [imagestring](http://www.php.net/manual/en/function.imagestring.php) kan man ange storleken i den andra parametern. Värden du kan ge är 1 till 5.
Huruvida det även finns fem storlekar i andra fonter du laddar ner har jag ingen aning om.

Vill du ha en bakgrundsfärg istället för bild, kan du använda dig av [imagecreate](http://www.php.net/manual/en/function.imagecreate.php) för att skapa bilden.

Permalänk: https://www.webforum.nu/p/1756497

## #11 — learn, 2006-01-31T23:45Z

Jag menar att jag vill ha texten utskriven på en bakgrund istället för på en bild. Typ så här:

```
<div style="background-image:url(textgenerator.php?text=lite text); width:100px; height:100px">
</div>
```

**istället** för så här:

```
<img src="textgenerator.php?text=lite text" />
```

Går det på ngt sätt att åstadkomma?

Permalänk: https://www.webforum.nu/p/1756568

## #12 — Matte, 2006-02-01T07:48Z

Det borde fungera tycker jag.

Fast du får nog köra [rawurlencode](http://se2.php.net/manual/en/function.rawurlencode.php) på textsträngen först.

Permalänk: https://www.webforum.nu/p/1759531

## #13 — learn, 2006-02-01T11:37Z

Det funkar även det, men kvalitén på bilden efteråt suger rent ut sagt.
Detta är koden:

```
<br />
Original:<br />
<div style="background-image:url(bakgrund.jpg); width:500px; height:100px">
</div>
<br />
<br />
Text på bild:<br />
<img src="test4.php?text=Enlitentext&font=verdana">
<br />
<br />
Text på bakgrund:<br />
<div style="background-image:url(test4.php?text=Enlitentext&font=verdana); width:500px; height:100px">
</div>
```

```php
header("Content-type: image/jpeg"); 

$im = imagecreatefromjpeg('bakgrund.jpg'); 
$trans_white = imagecolorallocatealpha($im, 255, 255, 255, 75);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);

$text = $_GET["text"];
$font = $_GET["font"];

imagettftext($im, 20, 0, 10, 50, $black, $font, $text); 

imagejpeg($im); 
imagedestroy($im);
```

Bifogar bilder på resultatet och en inzoomning på hur kvalitén försämras.

Finns det något sätt för att behålla kvalitén på bilden??

Bilagor:

- [resultat.jpg](https://www.webforum.nu/a/9535.jpg)
- [kvalitet.jpg](https://www.webforum.nu/a/9537.jpg)

Permalänk: https://www.webforum.nu/p/1759603

## #14 — Matte, 2006-02-01T12:43Z

Något bättre bör det blir om du ändrar till

```php
imagejpeg($im, '', 95);
```

70 är defaultvärdet för kvalitetsparametern om du inte anger något. 95 har jag upplevt ger ungefär samma filstorlek som originalet.

Permalänk: https://www.webforum.nu/p/1759614

## #15 — learn, 2006-02-01T13:05Z

Jag bytte till

```php
imagepng($im)
```

och då blev kvalitén kanonbra igen. Det är väl ett bra sätt?

Permalänk: https://www.webforum.nu/p/1759622

## #16 — Matte, 2006-02-01T13:14Z

Om PNG är lämplig för bilden är det ett bra sätt. JPEG är nästan alltid lite förstörande.

Hur blev annars kvaliteten näer du ändrader till 95 i kvalitet på JPEG ?

Permalänk: https://www.webforum.nu/p/1759630

## #17 — learn, 2006-02-01T13:31Z

> **Matte skrev:**
>
> Hur blev annars kvaliteten näer du ändrader till 95 i kvalitet på JPEG ?

Hyfsad, bättre i PNG.

Permalänk: https://www.webforum.nu/p/1759636

## #18 — learn, 2006-02-03T01:00Z

Upptäckte att detta inte fungerar i Opera  :q   :q   :q 
Exakt samma kod funkar finfint i både FF och IE..!! Vad kan detta bero på, snälla hjälp mig!

```
<div style="background-image:url(php/funktioner/textgen.php?t=litetext&f=verdana&image=bild&s=40&a=30); width:100px; height:100px">
</div>
```

```php
<?php 
header("Content-type: image/png"); 

$text = $_GET["t"];
$alpha = $_GET["a"];
$size = $_GET["s"];
$font = "../../fonter/".$_GET["f"];
$im = imagecreatefromjpeg('../../bilder/'.$_GET["image"].'.jpg'); 

$trans = imagecolorallocatealpha($im, 255, 255, 255, $a);

imagettftext($im, $s, 0, 0, $s, $trans, $f, $t); 

imagepng($im); 
imagedestroy($im); 
?>
```

Permalänk: https://www.webforum.nu/p/1760304

## #19 — Matte, 2006-02-03T11:42Z

Har du mellanslag eller liknande i "litetext" ?
Testa då att först köra texten genom [rawurlencode](http://se.php.net/manual/en/function.rawurlencode.php).

Permalänk: https://www.webforum.nu/p/1760462

## #20 — learn, 2006-02-03T12:34Z

Ja jag har mellanslag och &-tecken i "anropet", men jag kör rawurlencode på det, och det funkar ju i FF och IE...Hmm..

Permalänk: https://www.webforum.nu/p/1760481

---

Tråden på webben: https://www.webforum.nu/amne/php/141719-skapa-png-bild-med-transparens-från-textsträng  
Nästa sida: https://www.webforum.nu/amne/php/141719-skapa-png-bild-med-transparens-från-textsträng/page2.md
