C# Redimensionner image jpg, convertir des octets et de les enregistrer dans la base de données à l'aide de varbinary
Je suis en train de redimensionner mon image jpg téléchargées en utilisant contrôle FileUpload et de le convertir en octets avant de l'enregistrer dans la base de données (SQL Server 2008) (varbinary(MAX)). Ce que j'ai fait et le code ci-dessous est que j'ai réussi à convertir en octets et de les enregistrer dans la base de données varbinary(MAX). Je souhaite savoir comment faire pour redimensionner l'image avant de faire toutes ces fonctions. Ne m'aider. Merci!
Lire le fichier
string filePath = FileUpload1.PostedFile.FileName;
string filename = Path.GetFileName(filePath);
string ext = Path.GetExtension(filename);
Définir le contenttype basé sur l'Extension de Fichier
string contenttype = String.Empty;
switch (ext)
{
case ".jpg":
contenttype = "image/jpg";
break;
}
Convertir en octets et de les enregistrer dans la base de données à l'aide de varbinary
if (contenttype != String.Empty)
{
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
//insert the file into database
string strQuery = "insert into MemberReport(username, typeofcrime, location, crdatetime, citizenreport, image1, image2, image3, image4, image5)" +
" values ('" + username + "','" + typeofcrime + "','" + location.Trim() + "','" + datetime + "','" + detail.Trim() + "', @Data, @Data2, @Data3, @Data4, @Data5)";
SqlCommand cmd = new SqlCommand(strQuery);
cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes;
cmd.Parameters.Add("@Data2", SqlDbType.Binary).Value = bytes2;
cmd.Parameters.Add("@Data3", SqlDbType.Binary).Value = bytes3;
cmd.Parameters.Add("@Data4", SqlDbType.Binary).Value = bytes4;
cmd.Parameters.Add("@Data5", SqlDbType.Binary).Value = bytes5;
InsertUpdateData(cmd);
lblMessage.ForeColor = System.Drawing.Color.Green;
lblMessage.Text = "Report Sent!";
}
else
{
lblMessage.ForeColor = System.Drawing.Color.Red;
lblMessage.Text = "File format not recognised." +
" Upload Image formats";
}
InsertUpdateData méthode
private Boolean InsertUpdateData(SqlCommand cmd)
{
SqlConnection con = new SqlConnection("Data Source=localhost; Initial Catalog=project; Integrated Security=True");
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
try
{
con.Open();
cmd.ExecuteNonQuery();
return true;
}
catch (Exception ex)
{
Response.Write(ex.Message);
return false;
}
finally
{
con.Close();
con.Dispose();
}
Lire ces articles que vous pouvez obtenir ce que vous voulez: Redimensionner une Image en C# , Redimensionnement d'une Image, C# Image de Tableau d'Octets et le Tableau d'Octets en Image Convertisseur de Catégorie
OriginalL'auteur XiAnG | 2013-06-27
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de convertir le fichier téléchargé un
Image
objet, ce qui peut être fait simplement avec:Ensuite, déterminer quelle taille vous voulez que l'image soit. Disons que vous voulez la plus grande dimension de 256 pixels, et de maintenir le ratio d'aspect. Un peu de code adapté de la CodeProject article Redimensionnement d'une Image À La Volée à l'aide .NET:
Maintenant créer un nouveau
Bitmap
objet pour contenir l'image redimensionnée (à partir de la même CodeProject l'article) et de dessiner l'image d'origine:Et enfin, le transformer à nouveau en octets pour enregistrer dans la base de données:
J'ai pris la longue route pour définir le niveau de qualité de la sortie. Si vous n'avez pas l'esprit que le niveau de compression est utilisé, une simple
img.Save(ms, ImageFormat.Jpeg);
appel remplace les 4 premières lignes à l'intérieur de lausing
bloc de code.Découvrez la CodeProject article je l'ai mentionné ci-dessus pour plus d'informations sur le redimensionnement d'images, et de lire C# Image de Tableau d'Octets et le Tableau d'Octets À l'Image de la Classe de Convertisseur (également sur CodeProject) pour en savoir plus sur la conversion d'images/de tableaux d'octets.
La dernière partie, l'insertion de l'image dans une table de base de données. Je vais supposer Microsoft SQL, et de faire une très simple table insert.
Table est définie comme:
Et le code à insérer les données de l'image dans la table:
La valeur retournée est la valeur d'incrémentation automatique générée par SQL pour l'enregistrement.
Ou de mettre à jour une image existante:
Image uploaded = Image.FromStream(FileUpload1.PostedFile.InputStream);
cette ligne donner d'erreur : system.web.l'interface utilisateur.webcontrol.l'image ne contient pas une définition pour FromStreamMal
Image
classe. Vous devez ajouter une référence àSystem.Drawing
ou de l'utilisationSystem.Drawing.Image uploaded = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream);
de préciser le type de classe.Ajouter
using System.Drawing.Imaging;
l'utilise le bloc de votre code pour obtenir laImageCodecInfo
,EncoderParameters
etEncoderParameter
classes. Puisque vous avez déjà un conflit avec leImage
classe je collerais avec la spécification de l'espace de noms de chemin d'accès, comme dans mon dernier commentaire.La méthode u post est redimensionner base sur la largeur de l'image et de la hauteur de droit? Est-il de toute façon à la rendre redimensionner avec un spécifier la largeur et la hauteur? Et aussi, si j'ai 5 contrôle fileupload dans mon projet, je dois utiliser la méthode 5 fois ou il y a de toute façon d'appeler la fonction avec n'importe quel contrôle fileupload?
Le code que j'ai posté pour redimensionner l'image, de sorte que la plus grande dimension (hauteur ou largeur) est de 256 pixels après redimensionnement, avec le même aspect que l'entrée. Donc, si vous téléchargez une image, c'est-à 4000x1000 pixels, la sortie sera 256x64 pixels dans la taille. Si vous voulez juste une taille spécifique, et ne se soucient pas de proportions, vous pouvez ignorer les calculs et juste définir newWidth et newHeight à ce que vous souhaitez. Cela peut étirer l'image hors de forme, en fonction de ce que vous téléchargez.
OriginalL'auteur Corey