package main import ( "fmt" "math/rand/v2" "os" "path/filepath" ) func makeOutputDir() { // Default to just "output" err := os.Mkdir("output", 0755) check(err, "cannot make directory") } func glitchImage(inputFile string, outputFile string, shitSize int64, iterations int64) error { // Ensure the output directory exists makeOutputDir() // Prepend the "output" directory to the output file outputFilePath := filepath.Join("output", outputFile) // Open the source file for reading source, err := os.Open(inputFile) check(err, "failed to open source file: %w") defer source.Close() // Create a new file for writing the glitched copy destination, err := os.Create(outputFilePath) check(err, "failed to create output file: %w") defer destination.Close() // Copy the contents of the source file to the destination _, err = destination.ReadFrom(source) check(err, "failed to copy file contents: %w") // Get the Stat() of the destination file fileInfo, err := destination.Stat() check(err, "failed to get file info: %w") // Get the size of the destination file fileSize := fileInfo.Size() // Generate a random offset within the file var i int64 for i = 0; i < iterations; i++ { offset := rand.Int64N(fileSize) // Seek to the random offset in the destination file _, err = destination.Seek(offset, 0) check(err, "failed to seek to random offset: %w") // Generate random data and write it in shit := make([]byte, shitSize) _, err = destination.Write(shit) check(err, "failed to write shit data: %w") } return nil } func copyImage(inputFile string, outputFile string) error { // Ensure the output directory exists makeOutputDir() // Prepend the "output" directory to the output file outputFilePath := filepath.Join("output", outputFile) // Open the source file for reading source, err := os.Open(inputFile) check(err, "failed to open source file: %w") defer source.Close() // Create a new file for writing the copy destination, err := os.Create(outputFilePath) check(err, "failed to create output file: %w") defer destination.Close() // Copy the contents of the source file to the destination _, err = destination.ReadFrom(source) check(err, "failed to copy file contents: %w") return nil } func generateGlitchedSequence(inputFile string, totalImages int, shitSize int64, iterations int64) { for i := 1; i <= totalImages; i++ { outputFileName := fmt.Sprintf("img_glitched_%d.jpeg", i) // Generate unique filenames // Randomly decide whether to glitch or copy the image if rand.Int32N(2) == 0 { // Glitched image err := glitchImage(inputFile, outputFileName, shitSize, iterations) check(err, "failed to glitch image: %w") } else { // Normal image err := copyImage(inputFile, outputFileName) check(err, "failed to copy normal image: %w") } } }