Есть картинка, например размер 137740 байт. Мне нужно ее уменьшить (сжать). Делал через Compress: PHP: public byte[] Compress(byte[] raw) { using (MemoryStream memory = new MemoryStream()) { using (GZipStream gzip = new GZipStream(memory, CompressionMode.Compress, true)) { gzip.Write(raw, 0, raw.Length); } return memory.ToArray(); } } Объем только увеличился. Я на него и не расщитывал если чесно он может сжать только если будет в массиве много повторяющихся байтов. Делал через ColorMatrix: imag– моя картинка PHP: Graphics g = Graphics.FromImage(imag); ColorMatrix colorMatrix = new ColorMatrix( new float[][] { new float[] {.3f, .3f, .3f, 0, 0}, new float[] {.59f, .59f, .59f, 0, 0}, new float[] {.11f, .11f, .11f, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {0, 0, 0, 0, 1} }); ImageAttributes attributes = new ImageAttributes(); attributes.SetColorMatrix(colorMatrix); g.DrawImage(imag, new Rectangle(0, 0, imag.Width, imag.Height), 0, 0, imag.Width, imag.Height, GraphicsUnit.Pixel, attributes); g.Dispose(); return imag; Способ скинул 20кб но мы получаем не цветную картинку ! Где справедливость? Хочу выслушать ваши мысли. P.S картинка должна после сжатия должна такая же бить как и до.
пережимать jpeg/jpg/png смысла нет, они и так ужаты по самые уши, но вот если bmp, то конвертируй ее в ранесказанные форматы
Сори, забыл сказать, что картинка png. Ну, вот если я возьму winrar максимально сожму, то там неплохо сожмется вот мне что-то такое и надо.
Code: Public Class Form1 Dim filnam As String Dim k As Integer Dim flag As Boolean Dim bmp_to As Bitmap Dim x, y As Integer Dim watermarkImage As Bitmap Dim basicImage As Bitmap Private Sub resizer(ByVal source As String, ByVal k As Integer) Dim img As New Bitmap(source) Dim wid, hgt As Integer 1: wid = Math.Abs(img.Width \ k) hgt = Math.Abs(img.Height \ k) bmp_to = New Bitmap(wid, hgt) ' Копируем картинку с уменьшенными размерами без изменений Dim g As Graphics = Graphics.FromImage(bmp_to) g.InterpolationMode = _ Drawing2D.InterpolationMode.HighQualityBilinear g.DrawImage(img, 0, 0, wid - 1, hgt - 1) ' Выводим результат ProgressBar1.Maximum = 1 ProgressBar1.Value = CInt(0.5) bmp_to.Save(source.ToString + "-wp.".ToString + Microsoft.VisualBasic.Right(source, 3).ToString) Try If CInt(My.Computer.FileSystem.GetFileInfo(source + "-wp." + Microsoft.VisualBasic.Right(source, 3)).Length) > CInt(MaskedTextBox2.Text) Then k += 1 GoTo 1 End If ProgressBar1.Value = 1 'antialiasing Catch ex As Exception End Try End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Process.Start("explorer.exe") End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click Dim str As String = "ERR" Dim n As Integer Try ' Размеры для новой картинки If MaskedTextBox2.Text <> "" And MaskedTextBox2.Text <> Nothing Then For Each lstr As String In ListBox1.Items n += 1 resizer(lstr, 2) Label1.Text = CStr(n.ToString + "/" + ListBox1.Items.Count.ToString) lstr = "" Label1.Refresh() Next End If str = "THX!" Catch ex As Exception End Try ProgressBar1.Value = 0 If str = "ERR!" Then MsgBox(str, MsgBoxStyle.Critical) Else MsgBox(str, MsgBoxStyle.Information) End If ListBox1.Items.Clear() Label1.Text = "" End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load flag = False End Sub End Class Перепиши под C#, эта прога была написана именно для уменьшения размера фоток и работает уменьшая фото до заданного размера
Тогда тебе надо делать харакири, ибо как сказал выше визард, jpg,png,gif форматы и так настолько сжаты - насколько их смогли сжать, дальше - некуда, повторное использование все тех же алгоритмов сжатия может привести к побочному эффекту который ты по-ходу уже успел пронаблюдать (увеличение размера)