سلام چطوری میشه یک فایل متنی را در انتهای یک فایل مثل یک فایل متنی چسباند به گونه ای که فرمت عکس تغییری نکند و عکس نیز قابل نمایش باشد
و اگر میشه این کار رو کرد چطور میشه دوباره این متن رو برگردونیم
:20::20:
Printable View
سلام چطوری میشه یک فایل متنی را در انتهای یک فایل مثل یک فایل متنی چسباند به گونه ای که فرمت عکس تغییری نکند و عکس نیز قابل نمایش باشد
و اگر میشه این کار رو کرد چطور میشه دوباره این متن رو برگردونیم
:20::20:
کسی بلد نیست؟
سلام
بله میشه ... و ساده هم است ...
کافی است بایتهای فایل متنی را در انتهای خود فایل تصویر اضافه کنید.
فایل بزرگتر میشود و نمایش هم داده میشود.
فقط برای جداسازی باید بدانید از کدام نقطه (آدرس بایت یا آفست) متن شروع میشود و تصویر تمام شده ...
راه ساده این کار هم میتواند ان باشد که 4 بایت آخر فایل تصویر جدید را به ذخیره حجم بایتی تصویر اولیه اختصاص دهید که این عدد همان آفست شروع اطلاعات متن است.
مرسی اما چطوری باید این کار را انجام بدهم
میشه یه نمونه برام درست کنید ؟
ممنون میشم
سلام
نمونه ساده ذخیره متن در انتهای فایل:
روی خواندنش هم خودتان سعی کنید، ساده است، اگر بخواهید میتوانید.کد:private void Merge(string file, string text)
{
if ((string.IsNullOrEmpty(file)) || (string.IsNullOrEmpty(text))) return;
var buffer = System.Text.Encoding.UTF8.GetBytes(text);
int buffer_length = buffer.Length;
using (var strm = new System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write))
{
strm.Seek(0, System.IO.SeekOrigin.End);
strm.Write(buffer, 0, buffer_length);
strm.WriteByte((byte)(buffer_length & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 8) & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 16) & byte.MaxValue));
strm.WriteByte((byte)((buffer_length >> 24) & byte.MaxValue));
}
}
(البته در کد بالا چهار بایت آخر را به جای حجم فایل اولیه، حجم خود اطلاعات string درج شده را ریختم، فرق زیادی نمیکند!)
موفق باشید.
دست شما درد نکنه اما من با vb کار می کنم
میشه یه نمونه هم برای vb بگذارید
سلام
کد:Private Sub Merge(ByVal file As String, ByVal text As String)
If (String.IsNullOrEmpty(file)) OrElse (String.IsNullOrEmpty(text)) Then Return
Dim buffer() As Byte = System.Text.Encoding.UTF8.GetBytes(text)
Dim buffer_length As Integer = buffer.Length
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write)
strm.Seek(0, System.IO.SeekOrigin.End)
strm.Write(buffer, 0, buffer_length)
strm.WriteByte(CByte(buffer_length And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 8) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 16) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 24) And Byte.MaxValue))
End Using
End Sub
ممنون کار کرد
حالا چطوری میشه از همین فایل متن رو بر گردوند ؟ یعنی عکسش رو انجام داد
اگه اونم برام بنویسید خیلی خوب میشه:11:
سلام
برای من نوشتنش کاری ندارد، در حد همان چند خط قبلی است ...
ولی میخواستم خودتان یک سعی و تلاشی میکردید، مطمئن باشید جواب دست و پاشکسته ای که خود آدم به ان رسیده باشد، ارزش بیشتری دارد و تاثیرش ماندگار و پایدار خواهد بود و در نهایت شمار ا به جایی خواهد رساند که ذهن شما سریعترین و مطمئن ترین حل المسائل شما خواهد شد!
کد:'...
Merge("C:\file.jpg", "بسم ا... الرحمن الرحیم")
Dim x As String = Extract("c:\file.jpg")
'...
Private Shared Function Extract(ByVal file As String) As String
If (String.IsNullOrEmpty(file)) Then Return Nothing
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read)
If (strm.Length <= 4) Then Return Nothing
strm.Seek(-4, System.IO.SeekOrigin.End)
Dim buffer_length As Integer = strm.ReadByte() Or (strm.ReadByte() << 8) Or (strm.ReadByte() << 16) Or (strm.ReadByte() << 24)
If (buffer_length <= 0) OrElse (strm.Length < (buffer_length + 4)) Then Return Nothing
strm.Seek(- buffer_length - 4, System.IO.SeekOrigin.End)
Dim buffer(buffer_length - 1) As Byte
strm.Read(buffer, 0, buffer_length)
Return System.Text.Encoding.UTF8.GetString(buffer)
End Using
End Function
Private Shared Sub Merge(ByVal file As String, ByVal text As String)
If (String.IsNullOrEmpty(file)) OrElse (String.IsNullOrEmpty(text)) Then Return
Dim buffer() As Byte = System.Text.Encoding.UTF8.GetBytes(text)
Dim buffer_length As Integer = buffer.Length
Using strm As New System.IO.FileStream(file, System.IO.FileMode.Append, System.IO.FileAccess.Write)
strm.Seek(0, System.IO.SeekOrigin.End)
strm.Write(buffer, 0, buffer_length)
strm.WriteByte(CByte(buffer_length And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 8) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 16) And Byte.MaxValue))
strm.WriteByte(CByte((buffer_length >> 24) And Byte.MaxValue))
End Using
End Sub
خیلی ممنون
من خواستم یه نرم افزار برای مخفی کردن متن توی عکس درست کنم
اما کار کردن با system.io رو بلد نیستم من وی بی رو در حد کتاب های آموزشی بلدم و کار با کلاس های مختلف ویندوز رو بلد نیستم
اگر آموزش کامل تری را سراغ دارید حتما بهم بگید
خیلی دوست دارم کامل تر یاد بگیرم اما نمی دانم از کجا