init
This commit is contained in:
		
							parent
							
								
									351b6df779
								
							
						
					
					
						commit
						9c5d586bd3
					
				
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
*.gif
 | 
			
		||||
*.jpeg
 | 
			
		||||
*.png
 | 
			
		||||
.DS_Store
 | 
			
		||||
							
								
								
									
										60
									
								
								glitch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								glitch.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"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")
 | 
			
		||||
 | 
			
		||||
		// fmt.Printf("Successfully wrote %d bytes of shit at offset %d in file %s\n", shitSize, offset, outputFilePath)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								glitch_img
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								glitch_img
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										51
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if len(os.Args) < 5 {
 | 
			
		||||
		fmt.Println("Usage: go run main.go <source-file> <number-of-copies> <shit-size> <iterations>")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sourceFile := os.Args[1]
 | 
			
		||||
	numCopies, err := strconv.Atoi(os.Args[2])
 | 
			
		||||
	if err != nil || numCopies <= 0 {
 | 
			
		||||
		fmt.Println("Invalid number of copies. Must be a positive integer.")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	shitSize, err := strconv.ParseInt(os.Args[3], 10, 64) // Parse shitSize as int64
 | 
			
		||||
	if err != nil || shitSize <= 0 {
 | 
			
		||||
		fmt.Println("Invalid shit size. Must be a positive integer.")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	iterations, err := strconv.ParseInt(os.Args[4], 10, 8)
 | 
			
		||||
 | 
			
		||||
	for i := 1; i <= numCopies; i++ {
 | 
			
		||||
		outputFile := fmt.Sprintf("%s_glitched_%d%s",
 | 
			
		||||
			stripExtension(sourceFile),
 | 
			
		||||
			i,
 | 
			
		||||
			filepath.Ext(sourceFile),
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		err := glitchImage(sourceFile, outputFile, shitSize, iterations)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Printf("Error glitching file %d: %v\n", i, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fmt.Println("GENREATING GIF YEAHH ")
 | 
			
		||||
	// now run ffmpeg to make a gif!
 | 
			
		||||
	cmd := exec.Command("ffmpeg", "-y", "-framerate 60", "-i", "./output/img_glitched_%d.jpeg output.gif")
 | 
			
		||||
	err = cmd.Run()
 | 
			
		||||
	check(err, "cannot run ffmpeg command!")
 | 
			
		||||
	//
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user