You've already forked collage-maker
							
							college is generated
This commit is contained in:
		
							
								
								
									
										56
									
								
								cmd/run.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								cmd/run.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"go.balki.me/collage-maker/collage"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	req := collage.Request{}
 | 
			
		||||
	/*
 | 
			
		||||
			reqStr := []byte(`
 | 
			
		||||
		{
 | 
			
		||||
		  "background_image": "",
 | 
			
		||||
		  "aspect": { "width": 4224, "height": 3264 },
 | 
			
		||||
		  "dimension": { "width": 1187, "height": 848 },
 | 
			
		||||
		  "photos": [
 | 
			
		||||
			{
 | 
			
		||||
			  "image": "img1.jpg",
 | 
			
		||||
			  "crop": {
 | 
			
		||||
				"start": { "x": 419, "y": 667 },
 | 
			
		||||
				"end": { "x": 2707, "y": 3389 }
 | 
			
		||||
			  },
 | 
			
		||||
			  "frame": {
 | 
			
		||||
				"start": { "x": 0, "y": 0 },
 | 
			
		||||
				"end": { "x": 712, "y": 848 }
 | 
			
		||||
			  }
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
			  "image": "img2.jpg",
 | 
			
		||||
			  "crop": {
 | 
			
		||||
				"start": { "x": 331, "y": 44 },
 | 
			
		||||
				"end": { "x": 1132, "y": 1468 }
 | 
			
		||||
			  },
 | 
			
		||||
			  "frame": {
 | 
			
		||||
				"start": { "x": 712, "y": 0 },
 | 
			
		||||
				"end": { "x": 1187, "y": 848 }
 | 
			
		||||
			  }
 | 
			
		||||
			}
 | 
			
		||||
		  ]
 | 
			
		||||
		}
 | 
			
		||||
		`)
 | 
			
		||||
	*/
 | 
			
		||||
	// {"background_image":"","aspect":{"width":4224,"height":3264},"dimension":{"width":1187,"height":848},"photos":[{"image":"img1.jpg","crop":{"start":{"x":528,"y":3},"end":{"x":2696,"y":2583}},"frame":{"start":{"x":0,"y":0},"end":{"x":712,"y":848}}},{"image":"img2.jpg","crop":{"start":{"x":410,"y":0},"end":{"x":1014,"y":1074}},"frame":{"start":{"x":712,"y":0},"end":{"x":1187,"y":848}}}]}
 | 
			
		||||
	reqStr := []byte(`
 | 
			
		||||
{"background_image":"","aspect":{"width":4224,"height":3264},"dimension":{"width":1097,"height":848},"photos":[{"image":"img1.jpg","crop":{"start":{"x":448,"y":595},"end":{"x":2721,"y":3560}},"frame":{"start":{"x":0,"y":0},"end":{"x":649,"y":848}}},{"image":"img2.jpg","crop":{"start":{"x":418,"y":1},"end":{"x":1022,"y":1180}},"frame":{"start":{"x":665,"y":0},"end":{"x":1098,"y":848}}}]}
 | 
			
		||||
`)
 | 
			
		||||
	err := json.Unmarshal(reqStr, &req)
 | 
			
		||||
	fmt.Println(err)
 | 
			
		||||
	out, err := os.Create("./collage.jpg")
 | 
			
		||||
	fmt.Println(err)
 | 
			
		||||
	err = collage.Make(req, os.DirFS("."), out)
 | 
			
		||||
	fmt.Println(err)
 | 
			
		||||
}
 | 
			
		||||
@@ -4,6 +4,7 @@ package collage
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"image"
 | 
			
		||||
	"image/color"
 | 
			
		||||
	"image/draw"
 | 
			
		||||
	"image/jpeg"
 | 
			
		||||
	"io"
 | 
			
		||||
@@ -50,6 +51,8 @@ type Request struct {
 | 
			
		||||
func Make(req Request, source fs.FS, output io.Writer) error {
 | 
			
		||||
	rec := image.Rect(0, 0, int(req.Aspect.Width), int(req.Aspect.Height))
 | 
			
		||||
	canvas := image.NewRGBA64(rec)
 | 
			
		||||
	white := color.RGBA{255, 255, 255, 255}
 | 
			
		||||
	draw.Draw(canvas, rec, &image.Uniform{white}, image.Point{}, draw.Src)
 | 
			
		||||
	for _, photo := range req.Photos {
 | 
			
		||||
		img, err := GetImage(source, photo.ImageName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,9 @@
 | 
			
		||||
                // width: 80vh;
 | 
			
		||||
                height: 100%;
 | 
			
		||||
                // margin: auto;
 | 
			
		||||
                // aspect-ratio: 110 / 85;
 | 
			
		||||
                aspect-ratio: 7 / 5;
 | 
			
		||||
                aspect-ratio: 110 / 85;
 | 
			
		||||
                // aspect-ratio: 7 / 5;
 | 
			
		||||
                gap: 1rem;
 | 
			
		||||
            }
 | 
			
		||||
            .letter-landscape-2 .img1 {
 | 
			
		||||
                flex: 60%;
 | 
			
		||||
@@ -68,7 +69,7 @@
 | 
			
		||||
    <body onload="main()">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="controls">
 | 
			
		||||
                <button class="showbuton" onClick="showCrop()">Snap Collage</button>
 | 
			
		||||
                <button class="showbuton" onClick="snap()">Snap Collage</button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="imagebox">
 | 
			
		||||
            <div id="collage" class="image-surface letter-landscape-2">
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								index.js
									
									
									
									
									
								
							@@ -1,5 +1,7 @@
 | 
			
		||||
 | 
			
		||||
var crops = [];
 | 
			
		||||
function main() {
 | 
			
		||||
    initCollage("collage")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeCroppieElem(elem, imgUrl) {
 | 
			
		||||
    cpie = new Croppie(elem, {
 | 
			
		||||
@@ -15,20 +17,25 @@ function makeCroppieElem(elem, imgUrl) {
 | 
			
		||||
        url: imgUrl
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    crops.push(cpie)
 | 
			
		||||
    return cpie
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeCroppie(collageDivId) {
 | 
			
		||||
// collage state
 | 
			
		||||
 | 
			
		||||
var collageDivId;
 | 
			
		||||
var crops = [];
 | 
			
		||||
 | 
			
		||||
function initCollage(divId) {
 | 
			
		||||
    collageDivId = divId
 | 
			
		||||
    const collageDiv = document.getElementById(collageDivId)
 | 
			
		||||
    for(elem of collageDiv.getElementsByClassName("collage-img")) {
 | 
			
		||||
        makeCroppieElem(elem, elem.dataset.collageImageUrl)
 | 
			
		||||
        const cpie = makeCroppieElem(elem, elem.dataset.collageImageUrl)
 | 
			
		||||
        const lastLen = crops.push(cpie)
 | 
			
		||||
        elem.dataset.collageCropieIndex = lastLen - 1
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function main() {
 | 
			
		||||
    makeCroppie("collage")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showCrop() {
 | 
			
		||||
    for(cpie of crops) {
 | 
			
		||||
        console.log(cpie.get())
 | 
			
		||||
@@ -36,3 +43,65 @@ function showCrop() {
 | 
			
		||||
        console.log(cpie.element.clientHeight)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function ip() {
 | 
			
		||||
    const resp = await fetch("dummy.txt")
 | 
			
		||||
    console.log(await resp.text())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function snap() {
 | 
			
		||||
    const collageDiv = document.getElementById(collageDivId)
 | 
			
		||||
    col = collageDiv.offsetLeft;
 | 
			
		||||
    cot = collageDiv.offsetTop;
 | 
			
		||||
    console.log("----------------------")
 | 
			
		||||
    req = {
 | 
			
		||||
        background_image: "",
 | 
			
		||||
        aspect: {
 | 
			
		||||
            width: 528 * 4 * 2,
 | 
			
		||||
            height: 816 * 4,
 | 
			
		||||
        },
 | 
			
		||||
        dimension: {
 | 
			
		||||
            width: collageDiv.clientWidth,
 | 
			
		||||
            height: collageDiv.clientHeight,
 | 
			
		||||
        },
 | 
			
		||||
        photos: [],
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for(elem of collageDiv.getElementsByClassName("collage-img")) {
 | 
			
		||||
        const cpie = crops[elem.dataset.collageCropieIndex]
 | 
			
		||||
        // console.log(cpie.get().points)
 | 
			
		||||
        // console.log(elem.offsetLeft - col)
 | 
			
		||||
        // console.log(elem.offsetTop - cot)
 | 
			
		||||
        // console.log(elem.clientWidth)
 | 
			
		||||
        // console.log(elem.clientHeight)
 | 
			
		||||
        const fsx = elem.offsetLeft - col
 | 
			
		||||
        const fsy = elem.offsetTop - cot
 | 
			
		||||
        const [sx, sy, ex, ey] = cpie.get().points;
 | 
			
		||||
        const photo = {
 | 
			
		||||
            image: elem.dataset.collageImageUrl,
 | 
			
		||||
            crop: {
 | 
			
		||||
                start: {
 | 
			
		||||
                    x: parseInt(sx),
 | 
			
		||||
                    y: parseInt(sy),
 | 
			
		||||
                },
 | 
			
		||||
                end: {
 | 
			
		||||
                    x: parseInt(ex),
 | 
			
		||||
                    y: parseInt(ey),
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
            frame: {
 | 
			
		||||
                start: {
 | 
			
		||||
                    x: fsx,
 | 
			
		||||
                    y: fsy,
 | 
			
		||||
                },
 | 
			
		||||
                end: {
 | 
			
		||||
                    x: fsx + elem.clientWidth,
 | 
			
		||||
                    y: fsy + elem.clientHeight,
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
        };
 | 
			
		||||
        req.photos.push(photo)
 | 
			
		||||
    }
 | 
			
		||||
    console.log(JSON.stringify(req));
 | 
			
		||||
    ip()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user