Fotos aus GTA V auf dem PC laden, ohne Social Club


Neue Antwort erstellen
Erstellt
Apr. '15
letzte Antwort
1
Antwort
20 T.
Aufrufe
111
„Gefällt mir“
0
Abos
aleX
Admin
Admin


Anm. Datum: 01.01.2001
Beiträge: 24901
Wohnort: Österreich
Handy: Samsung Note 9

Slogan:
Wer glaubt etwas zu sein, hat aufgehört etwas zu werden!
BeitragDo 16. April, 2015 22:44
Antworten mit Zitat




Viele Fragen sich sicher wie man die Fotos die man in GTA V mit dem Handy macht und in die Galerie speichert auf den PC bekommt ohne den Umweg über Social Club.

Am einfachsten geht dies mit dem Open Source Tool "Photomatic". Ein nur 9KB kleines Programm welches nur aus einer EXE Datei besteht. Einfach ausführen und es erkennt dann wo GTA V gespeichert ist und speichert die Bilder unter:

Code:
C:\Users\<user>\Documents\Rockstar Games\GTA V\Profiles\<profile>\


... ab.

Hier der Reddit Post zum Programm:
https://www.reddit.com/r/GrandTheftAutoV/comments/32s622/photomatic_a_tool_to_extract_snapmatic_photos/

Quelltext:
https://bitbucket.org/WillKirkby/photomatic/src/master/


Download findet ihr hier angehängt, oder im Reddit Post.

Warum willst Du den Post von aleX melden?




Angehängte Datei
Photomatic.1.0.5584.13806.exe (9 KB, 148 mal)

MD5: 175b3edcff06aef9696b29316f38c1bf
SHA1: c09c584cf635a32da06c02cbcc53f3f1964351a7
CRC32: d62b3917



Der Mensch ist ein naiver Tourist mit einem abgelaufenem Visum für den Planeten Erde ..
Benutzer-Profile anzeigen Private Nachricht senden Senden Website dieses Benutzers besuchen

 Post #1

Werbung
World4You Webhosting

aleX
Admin
Admin


Anm. Datum: 01.01.2001
Beiträge: 24901
Wohnort: Österreich
Handy: Samsung Note 9

Slogan:
Wer glaubt etwas zu sein, hat aufgehört etwas zu werden!
BeitragDo 16. April, 2015 22:46
Antworten mit Zitat


Hier der Quellcode:

Code:
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;

namespace Photomatic
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Photomatic v{0}", Assembly.GetExecutingAssembly().GetName().Version.ToString());

         string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Rockstar GamesGTA VProfiles");

         Console.WriteLine("Scanning for images in {0}", folderPath);
         foreach (var fi in Directory.GetFiles(folderPath, "PGTA5*", SearchOption.AllDirectories).Select(a => new FileInfo(a)).Where(a => a.Name.StartsWith("PGTA5") && a.Extension == ""))
         {
            Console.Write("Loading {0}...  ", fi.Name);

            try
            {
               GtaPhoto photo = new GtaPhoto(fi.FullName);
               Console.WriteLine("{0}  {1}", photo.m_name, photo.m_title);

               string fileName = fi.Name;

               var match = Regex.Match(photo.m_json, ""creat":(\d+),");
               if (match.Success)
               {
                  long ts = long.Parse(match.Groups[1].Value);
                  DateTime utc = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(ts);
                  fileName = string.Format("{0:yyyy-MM-dd HH-mm-ss} {1}", utc, fi.Name);
               }

               string outPath = Path.Combine(fi.DirectoryName, fileName);
               photo.SaveJpeg(outPath + ".jpg");

               if (args.Contains("-info"))
               {
                  photo.SaveInfo(outPath + ".txt");
               }
            }
            catch
            {
               Console.WriteLine("Unexpected error.");
            }
         }
         Console.WriteLine("All done! Press Enter to exit.");

         Console.ReadLine();
      }
   }

   class GtaPhoto
   {
      const uint kUnknown1  = 0x01000000;
      const uint kJpegMagic = 0x4745504A;
      const uint kJsonMagic = 0x4E4F534A;
      const uint kTitlMagic = 0x4C544954;
      const uint kDescMagic = 0x43534544;
      const uint kJendMagic = 0x444E454A;
      const int  kBaseOffset = 0x108;
      
      public string m_name;
      public uint   m_checksum;
      public byte[] m_jpegData;
      public string m_json;
      public string m_title;
      public string m_desc;


      public GtaPhoto(string p_filepath)
      {
         using (BinaryReader br = new BinaryReader(File.OpenRead(p_filepath)))
         {
            uint unknown1 = br.ReadUInt32(); Debug.Assert(unknown1 == kUnknown1);
            m_name = br.ReadNullPaddedUCS2(0x100);

            m_checksum = br.ReadUInt32();
            // --- offset base is here at 0x108 ---
            uint offsetJEND = br.ReadUInt32(); // plus 0x108 - points to exact end of file, not the JEND marker
            uint offsetJSON = br.ReadUInt32(); // plus 0x108
            uint offsetTITL = br.ReadUInt32(); // plus 0x108
            uint offsetDESC = br.ReadUInt32(); // plus 0x108

            uint jpegMagic = br.ReadUInt32(); Debug.Assert(jpegMagic == kJpegMagic);
            uint jpegBuffer = br.ReadUInt32(); // buffer is always 0x80000 (512 KiB)
            uint jpegLength = br.ReadUInt32();
            m_jpegData = br.ReadBytes((int)jpegLength);
            br.ReadBytes((int)(jpegBuffer - jpegLength));

            Debug.Assert(br.BaseStream.Position == kBaseOffset + offsetJSON);
            uint jsonMagic = br.ReadUInt32(); Debug.Assert(jsonMagic == kJsonMagic);
            uint jsonLength = br.ReadUInt32();
            m_json = br.ReadNullPaddedASCII((int)jsonLength);

            Debug.Assert(br.BaseStream.Position == kBaseOffset + offsetTITL);
            uint titlMagic = br.ReadUInt32(); Debug.Assert(titlMagic == kTitlMagic);
            uint titlLength = br.ReadUInt32();
            m_title = br.ReadNullPaddedASCII((int)titlLength); // 0x28 max

            Debug.Assert(br.BaseStream.Position == kBaseOffset + offsetDESC);
            uint descMagic = br.ReadUInt32(); Debug.Assert(descMagic == kDescMagic);
            uint descLength = br.ReadUInt32();
            m_desc = br.ReadNullPaddedASCII((int)descLength); // unknown max - seems to be unused anyways

            uint jendMagic = br.ReadUInt32(); Debug.Assert(jendMagic == kJendMagic);
            Debug.Assert(br.BaseStream.Position == kBaseOffset + offsetJEND);
         }
      }

      public void SaveJpeg(string p_filepath)
      {
         File.WriteAllBytes(p_filepath, m_jpegData);
      }

      public void SaveInfo(string p_filepath)
      {
         using (StreamWriter sw = new StreamWriter(p_filepath))
         {
            sw.WriteLine("TITL: {0}", m_title);
            sw.WriteLine("DESC: {0}", m_desc);
            sw.WriteLine("JSON: {0}", m_json);
         }
      }
   }

   static class Extensions
   {
      public static string ReadNullPaddedASCII(this BinaryReader self, int bytes)
      {
         byte[] data = self.ReadBytes(bytes);
         StringBuilder buffer = new StringBuilder();
         byte val;
         for (int i = 0; i < data.Length; ++i)
         {
            if ((val = data[i]) == 0) break;
            buffer.Append((char)val);
         }
         return buffer.ToString();
      }

      public static string ReadNullPaddedUCS2(this BinaryReader self, int bytes)
      {
         byte[] data = self.ReadBytes(bytes);
         StringBuilder buffer = new StringBuilder();
         ushort val;
         for (int i = 0; i < data.Length; i += 2)
         {
            if ((val = BitConverter.ToUInt16(data, i)) == 0) break;
            buffer.Append((char)val);
         }
         return buffer.ToString();
      }
   }
}

Warum willst Du den Post von aleX melden?




Angehängte Datei
WillKirkby-photomatic-e54b1d1d9405.zip (5.31 KB, 47 mal)

MD5: 3b2b81a87386c45dab73221bd15d6d81
SHA1: 499c023fc013c730150a67ef1181f9ffcbcbbf07
CRC32: 4086806f



Der Mensch ist ein naiver Tourist mit einem abgelaufenem Visum für den Planeten Erde ..
Benutzer-Profile anzeigen Private Nachricht senden Senden Website dieses Benutzers besuchen

 Post #2

Beiträge der letzten Zeit anzeigen:      

Neue Antwort erstellen

Ähnliche Themen:
Kahlenberg-Seilbahn ohne UVP
Stadtregierungs-Programm ohne ÖVP unterzeichnet
Fahrgastplus durch Öffis ohne Grenzen
Kirche wirbt via Social Media um Firmlinge
Social-Media-Chef von indischer Partei festgenommen
Cupfinale ohne grobe Probleme: 14 Anzeigen
KV-Verhandlungen für Fahrradboten weiter ohne Einigung
Bühnen Graz Laden zum 529-Jahre-Herbstfest
Israel: Rafah-Offensive mit oder ohne Deal mit Hamas
Gaza: Ärzte ohne Grenzen warnt vor „stillem Sterben“

Kurze URL:

Du hast bereits für diesen Post angestimmt...

;-)




Alle Zeiten sind GMT + 1 Stunde

Top