Jag har en applikation som man kan skriva text på bild, men tyvärr så blir det inte den bästa kvaliten. Micke, Jag får det inte att funka, jag har kodat om lite som du skrev fel, Micke, Oj, sorry. Jag som hade skrivit lite fel tyvärr. Jag gjorde om allt och då funkade det utmärkt. Micke, Snällt att du gjorde det i VB.net också, jag har bara en fråga till. Går det att anpassa koden till att använda gif-format? Micke, Nej, jag får det inte att funka med Gif. Jag skriver väl fel för att få det funka med gif. hej, jag drar upp den här tråden då jag har försökt att färga min text men tyvärr inte lyckats. Hej, kör du med Gif kan du sätta transaparent för en viss färg. Dock finns det problem med Jpeg till gif eller om du sätter ihop flera bilder med olika pletter. Micke: Finns det något sätt att ändra text färgen på den här raden? Micke, Ok, tack. Micke? När jag hade tex. hade Color.Blue så var det bra, sedan när jag t.ex valde #FF9900 så blev det lite suddigt, dock så gör det inget för det syns inte så mycket.text på bild
Jag har läst lite om "quality" men tyvärr ej lyckats så bra, jag är tyvärr inte så hajj på C# än, men jag håller på att lär mig.
Sedan kan det väl vara typen av fil som är felet? Jag har inte heller lyckats när jag har angivit "image/gif".
<code>
{
Bitmap bmp= new Bitmap(Server.MapPath("bildText.jpg"));
Graphics g=Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias ;
g.DrawString(Request.QueryString["t"],
new Font("Trebuchet MS",13),SystemBrushes.WindowText, 4, 1);
Response.ContentType="image/jpeg";
bmp.Save(Response.OutputStream, bmp.RawFormat) ;
}
</code>
Skulle vara tacksam med hjälp,
// Micke åhlénSv: text på bild
Vad man får göra är att modifiera output kvaliten med hjälp av en <b>Encoder</b> och en <b>EncoderParameter</b> för att ange vilken kvalitet man vill ha.
<b>[C#]</b>
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
public class ImageOutput : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Bitmap bmp =
new Bitmap(Server.MapPath("andreas.jpg"));
Graphics g=Graphics.FromImage(bmp);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.DrawString("Hejsan",
new Font("Trebuchet MS",13), SystemBrushes.WindowText, 4, 1);
ImageCodecInfo info =
this.GetEncoderInfo("image/jpeg");
Encoder enc = Encoder.Quality;
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] =
new EncoderParameter(enc, 200L);
bmp.Save(Response.OutputStream, info, encParams);
}
/// <summary>
///
/// </summary>
/// <param name="mineType"></param>
/// <returns></returns>
public ImageCodecInfo GetEncoderInfo(string mineType)
{
ImageCodecInfo encoderInfo = null;
foreach(ImageCodecInfo info in ImageCodecInfo.GetImageEncoders())
{
if( info.MimeType == mineType )
{
encoderInfo = info;
break;
}
}
return encoderInfo;
}
}
<b>[VB.NET]</b>
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Drawing.Text
Public Class ImageOutput
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim bmp As Bitmap = New Bitmap(Server.MapPath("andreas.jpg"))
Dim g As Graphics = Graphics.FromImage(bmp)
g.TextRenderingHint = TextRenderingHint.AntiAlias
g.DrawString("Hejsan", New Font("Trebuchet MS", 13), SystemBrushes.WindowText, 4, 1)
Dim info As ImageCodecInfo = Me.GetEncoderInfo("image/jpeg")
Dim enc As Encoder = Encoder.Quality
Dim encParams As EncoderParameters = New EncoderParameters(1)
encParams.Param(0) = New EncoderParameter(enc, 100L)
bmp.Save(Response.OutputStream, info, encParams)
End Sub
Public Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
Dim encoderInfo As ImageCodecInfo
For Each encoderInfo In ImageCodecInfo.GetImageEncoders()
If encoderInfo.MimeType = mimeType Then
GetEncoderInfo = encoderInfo
End If
Next
End Function
End Class
Hoppas detta hjälper
Sv: text på bild
Just nu får jag fel på det här
<code>
denna: Encoder enc = Encoder.Quality;
EncoderParameters encParams = new EncoderParameters(1);
</code>Sv: text på bild
För det första är koden prövad så jag vet att den fungerar.. körde den precis innan jag postade den för att vara säker på att den var komplett. Och vad är det för fel du får? Hur i hela världen skall man kunna hjälpa dig när du inte klipper in ditt felmeddelande? =)
Jag skulle tippa på att du inte har lagt till rätt namnrymder och att det är därför du får felmeddelande. Se till att du har med följande namnrymder.
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
Sv: text på bild
Jag hade de dära namnrymderna så du vet.
Aja, nu sätter jag tråden som Löst.
Tack till dig Andreas som tog dig tid för mitt problem
// Micke Åhlén
Felet som var först var:
Beskrivning: Ett fel inträffade vid kompilering av en resurs som är nödvändig för att utföra den aktuella begäran. Granska den specifika felinformationen nedan och gör nödvändiga ändringar i källkoden. Sv: text på bild
Det kan hända oss all ;) Uppdaterar tråden med ett VB.NET inlägg för de som är intresserad av hur det ser ut där.Sv: text på bild
// Micke ÅhlénSv: text på bild
Får du kvalites problem med gif också? Gif använder inte komprimering när den lagrar bild informationen, medans jpg skalar bort information för att få ner storleken. Detta kallas för lös-komprimiring då man inte kan återskapa orginalet när det väl komprimerats.Sv: text på bild
Det är transparent jag är ute efter men ifall det inte blir så bra med gif så struntar jag i det.
// MickeSv: text på bild
Hur ska jag göra för att lyckas?
/mSv: text på bild
Jpeg har ju lite fler färger än de 256 som Gig tillåter. När du exempelvis omvanldar en bitmap som har fler färger än 256 kommer den att anpassa en palett som tyvärr inte duger. Den drar ner antalet färger men anpassar dem inte. Du kan själv skriva kod som kan "konventera" tusentals färger till 256 på några olika sätt. Ett sätt är att skapa den palett du vill ha för din gif, läsa in den och sedan gå genom färg för färg från din original palett för att se vilken färg den är närmst och ersätta denna med närmsta färg från din gif palett. Eller så kan ju göra en rutin som går genom hela din tusentals färgepalett och minska den genom att kolla efter palett för palett och ta nämrsta passande. Alltså leta reda på exemplevis blått ta de blåa färger som passar denna blåa bäst och ta bort övriga osv med alla de färger du har till du fått ner det till 256. Därefter sätt första färgen i paletten till transparent (oftast det vanligaste) dock måste du se till så du får den färgen du vill ha transparent på första färgen och på din bild.
Det är ingen lätt hantering då det går långsamt om du inte utför det med unsafe mode samt pekare.
Mvh JohanSv: text på bild
Du kan göra som jag gör:
<code>
private void AddTextToBitmap(string text,Bitmap bitmap)
{
pictureBuilder = Graphics.FromImage(bitmap);
SolidBrush TextColor = new SolidBrush(this.fontColor);
StringFormat stringFormat = new StringFormat();
stringFormat.Trimming = StringTrimming.None;
PointF textPosition = new PointF(this.textPosX,this.textPosY);
pictureBuilder.DrawString(text,this.font,TextColor,textPosition,stringFormat);
}
</code>
Mvh JohanSv: text på bild
g.DrawString(Request.QueryString["t"], new Font("Verdana",12), SystemBrushes.WindowText, 2, 2);
Sv: text på bild
Du får skapa en egen brush i den färgen du vill ha
SolidBrush sb = new SolidBrush(Color.Blue);
g.DrawString(Request.QueryString["t"], new Font("Verdana",12), sb, 2, 2);
Hoppas det löser sig!
Sv: text på bild
Går det att ha en #hex färg?
edit...
jag löste det, dock så blir inte jätte fint, blir lite suddigt med det kanske det "måste" bli ?
/mSv: text på bild
Suddigt? när du använde hex färg eller la på texten allmänt?
Mvh JohanSv: text på bild
/m